我正在尝试使用递归打印Fibonacci系列,而我的代码并没有结束递归。你能告诉我,如果我错过了什么。我认为第二次递归会进入无限循环,我无法弄清楚为什么会发生这种情况
class Main
{
public static void main (String[] args)
{
int k=7;
int x=0,y=1;
fib(x,y,k,0);
return;
}
public static void fib(int x,int y,int k,int cnt)
{
int z;
if(cnt>k)
return;
if(cnt<=k)
{
z=x+y;
x=y;
y=z;
System.out.println("value is"+z);
fib(x,y,k,cnt++);
}
}
}
答案 0 :(得分:1)
问题是帖子 -increment in:
fib(x,y,k,cnt++);
这会将cnt
的原始值传递给递归调用,然后会递增它。
如果您在cnt
的开头打印fib()
的值,则会看到它始终为零。
一个简单的解决方法是将该调用更改为
fib(x,y,k,cnt+1);
另外,你的Fibonacci数字的编号有点奇怪(我说第七个数字是8而你的代码认为它是34)。
最后,我可能值得注意第二个if
是不必要的。
答案 1 :(得分:1)
您似乎不理解斐波纳契数的概念。请阅读wikipedia article。以下是此功能的代码。
public static int fib(int n)
{
if(n == 0 || n == 1)
return n;
return fib(n-1) + fib(n-2);
}