CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Suite de Fibonacci

dzkille
dzkille
Niveau 10
23 février 2016 à 18:25:32

Bonjour, je suis actuellement entrain de voir les suites en Java et je ne comprends pas du tout la logique de la suite de Fibonacci, j'ai donc décider de chercher sur internet des codes-source qui pourraient éventuellement m'aider, le seul problème c'est que je ne trouve rien qui marche.

Mon code source à déjà une structure bien définie, que je ne souhaiterais pas changer car mon professeur veut que nous fassions de cette manière, j'en viens donc à la question suivante : où sont les éventuelles erreur dans ce code :

https://image.noelshack.com/fichiers/2016/08/1456248294-sans-titre.png

Candystand
Candystand
Niveau 10
23 février 2016 à 18:38:06

Tu ne rentres jamais dans ton for, car tu mets ton i à 2, or n vaut 1

LEpigeon-888
LEpigeon-888
Niveau 12
23 février 2016 à 18:50:11

Outre ce qu'a dit Candystand, dans ta boucle la seule opération que tu fais c'est "t = t1 + t2", sauf que t1 et t2 ne changent pas, donc quel que soit le nombre de tours effectué, t aura la même valeur.

dzkille
dzkille
Niveau 10
23 février 2016 à 19:10:03

D'accord, merci pour vos réponses rapides !
Je pense que le problème des n termes est résolu :
https://image.noelshack.com/fichiers/2016/08/1456250926-sans-titre.png
En revanche, je suis toujours bloqué, comment puis je faire en sorte de boucler quelque chose qui additionne à chaque fois les deux termes précédents?

Egounet
Egounet
Niveau 6
23 février 2016 à 20:39:45

LEpigeon-888 a déjà répondu, dans ton code t1 et t2 ne changent pas donc tu aura à chaque fois le même résultat. Il faut redéfinir t1 et t2 à chaque itération pour qu'ils correspondent aux termes précédents. Grosso modo :
t = t1+t2 t1 = t2 t2 = t

WhiteSpirit-75
WhiteSpirit-75
Niveau 7
23 février 2016 à 20:45:26

Si ça peut t'aider :

public class Main {

    public static void main(String[] args) {
        for(int i=0; i<10; i++) {
            System.out.println(i + " - " + calculeFibonacci(i));
        }
    }
    

    public static int calculeFibonacci(int n) {
        if(n < 0) {
            throw new IllegalArgumentException("Entrée invalide : n doit être positif !");
        }
        
        switch(n) {
            case 0  : return 0;
            case 1  : return 1;
            default : return calculeFibonacci(n-1) + calculeFibonacci(n-2);
        }
    }

}

A noter que cette solution n'est pas optimale car on recalcule à chaque fois les N précédents résultats (ce qui n'est pas le mieux en terme de perf). Mais bon tu n'as pas besoin d'aller à ce niveau de qualité j'imagine (une solution pourrait être une mise en cache ou dans une map.. bref stocker les résultats pour chaque n).

Message édité le 23 février 2016 à 20:50:20 par WhiteSpirit-75
WhiteSpirit-75
WhiteSpirit-75
Niveau 7
23 février 2016 à 20:55:40

On peut même simplifier un peu le code :

public static int calculeFibonacci(int n) {
        if(n < 0) {
            throw new IllegalArgumentException("Entrée invalide : n doit être positif !");
        }
        
        return n < 2 ? n : calculeFibonacci(n-1) + calculeFibonacci(n-2);
    }
Message édité le 23 février 2016 à 20:56:27 par WhiteSpirit-75
Egounet
Egounet
Niveau 6
23 février 2016 à 21:30:23

Pour calculer un terme en particulier de la suite de Fibonacci, on peut utiliser la formule de Binet plus simplement :

public class Main {

    public static void main(String[] args) {
        for(int i=0; i<10; i++) {
            System.out.println(i + " --> " + Fibonacci(i));
        }
    }
    
    public static int Fibonacci(int n) {
    	return (int)(1/Math.sqrt(5) * ( Math.pow( (1+Math.sqrt(5))/2 , n)  - Math.pow( (1-Math.sqrt(5))/2 , n) ));
    }
}
dzkille
dzkille
Niveau 10
24 février 2016 à 14:40:57

Merci à tous pour votre aide !
Malheureusement je m'en dois de me tenir à la méthode de mon prof, donc j'ai continuer sur ma lancée et j'y suis presque :
https://image.noelshack.com/fichiers/2016/08/1456320883-sans-titre.png

il me reste juste cette erreur à corriger l'erreur suivante
Mon n: 3, passe directe à 2 alors que 0+1 = 1
J'ai donc compris en regardant mon code d'où venait le problème mais je ne vois absolument pas comment rectifier cela.
Est ce que quelqu'un aurait une solution?

dzkille
dzkille
Niveau 10
24 février 2016 à 15:24:38

Voila, le problème est résolu , merci à tous ! :)
Pour ceux qui seraient éventuellement intéresser, voici le code source :

public class Fibonacci
{
public static void main(String args [])
{
System.out.println("Suite de Fibonacci");
System.out.println("***********************");
System.out.println("");

int n = 1;
int t1 = 0;
int t2 = 1;

System.out.println("n" + "-->\t" + "tn");
System.out.println("----------------------");

System.out.println( n + "-->\t" + t1);

for ( n = 2; n<=10; n++)
{

int t = t1+t2;

t2 = t1;
t1 = t;
System.out.println( n + "-->\t" + t);
}
System.out.println("");
System.out.println("FIN de programme");
}
}

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment