Suite fibo

Résolu/Fermé
tortue60 Messages postés 250 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013 - 21 mars 2013 à 22:08
tortue60 Messages postés 250 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013 - 23 mars 2013 à 13:11
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

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
23 mars 2013 à 11:15
Dans ta boucle for (i = 3; i <= n; i++) il faut que tu commences à 2, pas à 3 :

for (i = 2; i <= n; i++)
1
tortue60 Messages postés 250 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
23 mars 2013 à 12:08
j'ai remplacer 3 par 2 dans le for
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
23 mars 2013 à 12:45
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
tortue60 Messages postés 250 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
23 mars 2013 à 12:50
Je l'ai ai mi en long
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 23/03/2013 à 13:05
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
tortue60 Messages postés 250 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
23 mars 2013 à 13:11
Merci sa marche
0
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 73
23 mars 2013 à 03:26
Bonsoir/Bonjour,

ton programme fonctionne parfaitement.
ou est le problème?!
0
tortue60 Messages postés 250 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
23 mars 2013 à 11:04
PAr exemple pour n = 6, il me trouve 8 au lieu de 13, c'est pas bon
0
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 73
Modifié par walidovich_85 le 23/03/2013 à 11:45
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
tortue60 Messages postés 250 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
23 mars 2013 à 11:52
Moi je préfère avec les if, je comprend mieux
0
tortue60 Messages postés 250 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
23 mars 2013 à 11:32
Et c'est normale que quand je tape des grands nombres sa devien négatif?
0
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 73
23 mars 2013 à 11:34
comme quoi?
0
tortue60 Messages postés 250 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
23 mars 2013 à 11:52
pour 72, il m'affiche -2015728079

Il faut pas que je passe en double, c'est peut plus grand q'un entier
0
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 73
23 mars 2013 à 12:00
je me rappel que j'ai testé ton code.
et ça donne pas des t=résultats négatifs
0
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 73
23 mars 2013 à 12:04
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
tortue60 Messages postés 250 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
23 mars 2013 à 12:06
A partir de 46, sa me donne des résults négatifs
0