我正在尝试使用此程序打印斐波纳契系列。我使用了n=10
(印刷的斐波那契数量),我得到了10多个数字。请你指出我错在哪里?
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 :(得分:3)
您的解决方案已经迭代,包括while
循环。但是,您使用减少的计数调用fib
,大大增加了打印的数字。
删除递归调用,它会正常工作。
答案 1 :(得分: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次迭代。