2017-10-07 3 views
-3

Afin de ne pas parcourir la boucle infinie, je décrémente la variable de comptage à l'intérieur du while whilequ'elle va à la boucle infinie en utilisant le fonction récursive.l'utilisation de la fonction récursive dans la boucle while va en boucle infinie même si décrémente la valeur de comptage

public class RFibonocci{ 
    static int n1=0,n2=1,count; 
    public RFibonocci(){ 
     System.out.println("Enter the fibo series:"); 
     Scanner scr=new Scanner(System.in); 
     count=scr.nextInt(); 
     System.out.println("Series is:"); 
     System.out.println(n1+"\n"+n2); 
     fibo(count-2); 
    } 
    public static void fibo(int count){ 
     while(count>0){ 
      int n3=n1+n2; 
      System.out.println(n3); 
      n1=n2; 
      n2=n3; 
      count-=1; 
      fibo(count); 
     } 
    } 
    public static void main(String...args){ 
     new RFibonocci(); 
    } 

} 
+0

Ce n'est pas infini. Juste très très très longtemps. –

+0

Bienvenue sur SO. Quelle valeur 'count' la fait fonctionner à l'infini? – c0der

Répondre

0

Vous n'êtes pas censé avoir la boucle whileet récursion. (On dirait que ça continue juste parce que les appels partagent l'état à travers des variables globales.Ne faites pas ça: comme vous pouvez le voir, il est difficile de déboguer.)

0

D'abord, je voudrais changer la requête initiale à la utilisateur à "Entrez le nombre de termes Fibonacci à calculer", ou quelque chose de similaire.

Je considérerais également la suppression de l'instruction while et l'insertion d'une instruction if pour le cas de base de la récurrence fibo(). L'inclusion d'une instruction while dans la fonction fibo() crée des problèmes. Non seulement la fonction fibo() est appelée dans la boucle while, mais la boucle while continuera à s'exécuter après le retour de fibo() interne.

Espérons que cela aide.