2015-11-05 87 views
1

我试图用此程序打印斐波那契数列。我用n=10(斐波那契数字打印),我得到了超过10个数字。请你能指出我哪里错了吗?java斐波那契数列错误:没有得到正确的输出

import java.util.*; 
class myprogram{ 
    static int f=0,s=1,sum=0; 
    public static void main(String[] args){ 
     Scanner sc=new Scanner(System.in); 
     System.out.printf("Enter the number of numbers you want to print"); 
     int n=sc.nextInt(); 
     System.out.print(f+" "+s); 
     fib((n-2)); 
    } 
    static void fib(int count){ 
     while(count!=0) 
     { 
      sum=f+s; 
      System.out.print(" "+sum); 
      f=s; 
      s=sum; 
      count-=1; 
      fib(count); 
     } 

    } 
} 

输入:

n=10 

预期输出:

0 1 1 2 3 5 8 13 21 34 

我的输出:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 ... 
+0

remove fib(count);从你的fib(int count)方法结束。 –

+0

这是一个巨大的错误。感谢您指出。 – sakyan

+0

我用'if(count> 0)'替换'while(count!= 0)',因为我使用的是递归。 – sakyan

回答

3

你的解决方案已经迭代,包括while循环。但是,您使用减少的计数呼叫fib,大大增加了打印的号码数量。

删除递归调用,它会工作得很好。

0

你的代码做的是:

初始:

Iteration  f  s  sum 
0    0  1  0 

FIB函数的第一次调用

Iteration  f  s  sum 
1    1  1  1 
2    1  2  2 
3    2  3  3 
4    3  5  5 
5    5  8  8 
6    8  13  13 
7    13 21  21 
8    21 34  34 

你的程序应根据你想要什么到此为止。但是,通过在函数末尾添加fib(count),可以一次又一次递归地调用fib函数。这就是为什么它继续。它会进行7(9-2)+ 6 + 5 + 4 + 3 + 2 = 27次迭代。