在递归中打印斐波纳契数列

时间:2013-04-18 04:56:13

标签: java recursion fibonacci

我正在尝试使用递归打印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++);

      }

  }
}

2 个答案:

答案 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);
}