Suite fibo

Résolu
tortue60 Messages postés 269 Statut Membre -  
tortue60 Messages postés 269 Statut Membre -
Bonjour,

Je cherche à réaliser un programme qui calcul les termes de la suite de fibonacci.

F0 = 1
F1 = 1
Fn+2 = Fn+1 + Fn

voici les premiers que j'ai trouvé en faisant les calcul:
F2 = 2
F3 = 3
F4 = 5
F5 = 8
F6 = 13

L'utilisateur doit saisir n et le programme doit afficher Fn

voici ce que j'ai fait:

import java.util.Scanner;
public class Suites_Fabonacci {
public static void main(String[] args) {

int somme, terme, termePrécédent;
int n, i;

do {
System.out.println("Entrez la valeur de n (minimum 1) :");
n = (new Scanner(System.in)).nextInt();
} while (n < 1);
if (n == 1)
{
System.out.println("Le résultat vaut 1");
}
else
{
termePrécédent = 1;
terme = 1;
for (i = 3; i <= n; i++) {
somme = terme + termePrécédent;
termePrécédent = terme;
terme = somme;
}
System.out.println("Le résultat de la suite de Fibonacci pour " + n
+ " vaut : " + terme);
}
}
}

Merci de votre aide

4 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Dans ta boucle for (i = 3; i <= n; i++) il faut que tu commences à 2, pas à 3 :

    for (i = 2; i <= n; i++)
    1
    1. tortue60 Messages postés 269 Statut Membre
       
      j'ai remplacer 3 par 2 dans le for
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    Pour le problème des nombres négatifs à partir d'une certaine valeur c'est normal, parce que les types primitifs ont une plage de valeurs, au delà de laquelle on ne peux plus les utiliser.

    Voir : Java - Les types de données

    L'utilisation des double est une fausse bonne idée, car ils sont moins précis. Plus la valeur sera grande, plus le résultat sera imprécis. Et l'utilisation des DecimalFormat n'y changera rien.

    Si tu veux utiliser des valeurs entières sans limite d'amplitude ni de précision, tu devrais utiliser la classe BigInteger, voici sa documentation : java.math.BigInteger
    1
    1. tortue60 Messages postés 269 Statut Membre
       
      Je l'ai ai mi en long
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Les long sont un peu mieux que les int, mais ils auront aussi rapidement une limite...
      Avec des int tu peux calculer jusqu'à n=45, et avec des long jusqu'à n=91... on est très loin des 1000 !

      Voici un exemple avec BigInteger :

      import java.math.BigInteger;
      
      public class SuiteFibonacci 
      { 
          public static BigInteger fibonacci(int n)
          {
              BigInteger u0 = BigInteger.ONE, u1 = BigInteger.ONE;
              
              for (int i=2; i<=n; i++)
                  u1 = u0.add(u0=u1);
              
              return u1;
          }
          
          public static void main(String[] args) 
          {
              for (int n=0; n<=10; n++)
                  System.out.printf("%d\t%s\n",n,fibonacci(n));
              
              System.out.printf("%d\t%s\n",1000,fibonacci(1000));
          }
      }
      0
    3. tortue60 Messages postés 269 Statut Membre
       
      Merci sa marche
      0
  3. walidovich_85 Messages postés 698 Statut Membre 73
     
    Bonsoir/Bonjour,

    ton programme fonctionne parfaitement.
    ou est le problème?!
    0
    1. tortue60 Messages postés 269 Statut Membre
       
      PAr exemple pour n = 6, il me trouve 8 au lieu de 13, c'est pas bon
      0
    2. walidovich_85 Messages postés 698 Statut Membre 73
       
      peut etre kil faut juste régler le nombre de boucle.
      pour moi, je me suis partis comme ça:

      switch (n) {
      case 0:
      System.out.println("fubonacci(0)=0");
      break;
      case 1:
      System.out.println("fubonacci(1)=1");
      break;

      default:
      int fiboPrecedent=0;
      for(int i=1;i<n;i++){
      int tmp=fibonnaci;
      fibonnaci=fibonnaci+fiboPrecedent;
      fiboPrecedent=tmp;
      }
      System.out.println("fubonacci("+n+")="+fibonnaci);
      break;
      }

      et ttes les routes mènent a Rome

      Being normal is boring... being geek is interesting
      0
    3. tortue60 Messages postés 269 Statut Membre
       
      Moi je préfère avec les if, je comprend mieux
      0
  4. tortue60 Messages postés 269 Statut Membre
     
    Et c'est normale que quand je tape des grands nombres sa devien négatif?
    0
    1. walidovich_85 Messages postés 698 Statut Membre 73
       
      comme quoi?
      0
    2. tortue60 Messages postés 269 Statut Membre
       
      pour 72, il m'affiche -2015728079

      Il faut pas que je passe en double, c'est peut plus grand q'un entier
      0
    3. walidovich_85 Messages postés 698 Statut Membre 73
       
      je me rappel que j'ai testé ton code.
      et ça donne pas des t=résultats négatifs
      0
    4. walidovich_85 Messages postés 698 Statut Membre 73
       
      en effet, voial le résultat pour n= 1000:

      Entrez la valeur de n (minimum 1) :
      1000
      Le résultat de la suite de Fibonacci pour 1000 vaut : 1556111435
      0
    5. tortue60 Messages postés 269 Statut Membre
       
      A partir de 46, sa me donne des résults négatifs
      0