Suite fibo

Résolu
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. Bonsoir/Bonjour,

    ton programme fonctionne parfaitement.
    ou est le problème?!
    1. PAr exemple pour n = 6, il me trouve 8 au lieu de 13, c'est pas bon
    2. 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
    3. Moi je préfère avec les if, je comprend mieux
  2. Modérateur
    Dans ta boucle for (i = 3; i <= n; i++) il faut que tu commences à 2, pas à 3 :

    for (i = 2; i <= n; i++)
    1. j'ai remplacer 3 par 2 dans le for
  3. Et c'est normale que quand je tape des grands nombres sa devien négatif?
    1. comme quoi?
    2. pour 72, il m'affiche -2015728079

      Il faut pas que je passe en double, c'est peut plus grand q'un entier
    3. je me rappel que j'ai testé ton code.
      et ça donne pas des t=résultats négatifs
    4. 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
    5. A partir de 46, sa me donne des résults négatifs
  4. Modérateur
    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. Je l'ai ai mi en long
    2. Modérateur
      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));
          }
      }
    3. Merci sa marche