首页 > 解决方案 > 调试我的递归斐波那契 Java 代码并更正逻辑

问题描述

我无法理解为什么输出错误。

我试图编写一个打印斐波那契数的递归代码,并得到了预期的输出和一个意想不到的值流。

public class FibonacciSeries {

    static int limitNum = 10;  //the desired number of Fibonacci values

    public static void main(String[] args) {
        FibonacciSeries series = new FibonacciSeries();
        series.printRecursiveFibonacci(0,1,1);
    }

    public void printRecursiveFibonacci(int a, int b, int count)
    {
        while(count<=limitNum)
        {
          if(count==1||count==2)
          {
            System.out.println(count-1);
            count++;
            continue;
          }

        int k=a+b;
        a=b;
        b=k;
        System.out.println(b);
        count++;
        printRecursiveFibonacci(a, b, count);   
        }
    }

}

预期输出为 0 1 1 2 3 5 8 13 21 34

但我得到了 - 0 1 1 2 3 5 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 5 8 13 21 34 34 21 34 21 34 34 21 34 34 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 3 5 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 8 13 34 34 34 34 21 12 21 34 34 5 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 2 3 5 8 13 21 34 13 34 21 34 34 32 34 34 8 13 21 34 34 21 34 34 13 21 ...

标签: javadebuggingrecursionfibonacci

解决方案


我不确定你的代码到底发生了什么,很多奇怪的事情正在发生:

  • while并以相同的方法递归
  • ifcontinue不是if/else
  • 有时打印count - 1,有时打印b

我怀疑这与您的循环未按预期终止有关。一般来说,尽量坚持递归循环。这是一个示例实现:

public static void printFibLimit(int a, int b, int count) {
    if (count >= EXTERNALLY_DEFINED_LIMIT_VARIABLE) return;  // if true, we're done, no more work has to be done. 
// Since this is a tail-recursive function, return will terminate the function

    System.out.println(a);  // print our first value

    printFibLimit(b, a + b, count + 1);
    // a -> b
    // b -> a + b
    // count -> count + 1

}

推荐阅读