1

再帰を使用してフィボナッチ数列を出力しようとしていますが、コードが再帰を終了していません。私が何かを逃したかどうか教えてもらえますか.2番目の再帰が無限ループに陥っていると思います.なぜそれが起こっているのか分かりません.

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

問題はポストインクリメントです:

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

これにより、元の値がcnt再帰呼び出しに渡されインクリメントされます。

cntの開始時にの値をfib()出力すると、常にゼロであることがわかります。

簡単な修正の 1 つは、その呼び出しを次のように変更することです。

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

また、フィボナッチ数の番号付けは少し奇妙です (7 番目の数字は 8 で、コードは 34 だと思います)。

if最後に、2 番目は不要であることに注意してください。

于 2013-04-18T05:04:33.260 に答える
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 に答える