1

我正在尝试使用递归打印斐波那契数列,但我的代码并未结束递归。你能告诉我我是否遗漏了什么吗?我认为第二次递归正在进入无限循环,我无法弄清楚它为什么会发生

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++);

      }

  }
}
4

2 回答 2

1

您似乎不了解斐波那契数的概念。请阅读维基百科文章。以下是该函数的代码。

public static int fib(int n)
{
    if(n == 0 || n == 1)
        return n;

    return fib(n-1) + fib(n-2);
}
于 2013-04-18T05:05:45.347 回答
1

问题是增量:

  fib(x,y,k,cnt++);

这会将原始值传递cnt给递归调用,然后将其递增。

如果您cnt在 的开头打印 的值fib(),您会看到它始终为零。

一个简单的解决方法是将调用更改为

  fib(x,y,k,cnt+1);

此外,您的斐波那契数编号有点奇怪(我会说第七个数字是 8,而您的代码认为它是 34)。

最后,我可能值得注意的是,第二个if是不必要的。

于 2013-04-18T05:04:33.260 回答