斐波那契递归返回无数

时间:2019-05-27 21:32:35

标签: java recursion fibonacci

我的代码结果以无穷大的数字“ 2”表示,我不明白为什么。

我的导师还告诉我添加对负值的验证-我不知道该怎么做。

    public class FibonacciRecursive {

   public static void main(String[] args) {
        int fibonacciNumberOrder = 10;
        do {
            System.out.print(fibonacci(fibonacciNumberOrder) + " ");

        } while (true);
    }

    public static long fibonacci(int fibonacciNumberInOrder) {
        if (fibonacciNumberInOrder == 0) {
            return 0;
        }
        if (fibonacciNumberInOrder <= 2) {
            return 1;
        }
        long fibonacci = fibonacci(-1) + fibonacci(-2);
        return fibonacci;
    }
}

编辑: 当我更改该行

long fibonacci = fibonacci(-1) + fibonacci(-2);

收件人:

long fibonacci = fibonacci(fibonacciNumberInOrder-1) + fibonacci(fibonacciNumberInOrder-2);

它打印出无尽的“ 55”

如何更改代码以使其正常工作?

2 个答案:

答案 0 :(得分:0)

您将使用常量递归!改变这个

long fibonacci = fibonacci(-1) + fibonacci(-2);

long fibonacci = fibonacci(fibonacciNumberInOrder-1) + fibonacci(fibonacciNumberInOrder-2);

而且,在while的{​​{1}}循环中-您需要修改main

fibonacciNumberInOrder

答案 1 :(得分:0)

之所以会发生这种情况,是因为您使用常量而不是传递给它的相对数字来计算斐波那契数,这是递归的点。

unsigned long

键更改行是:

public static long fibonacci(int fibonacciNumberInOrder) {
    if (fibonacciNumberInOrder == 0) {
        return 0;
    }
    if (fibonacciNumberInOrder <= 2) {
        return 1;
    }
    long fibonacci = fibonacci(fibonacciNumberInOrder - 1) + fibonacci(fibonacciNumberInOrder - 2);
    return fibonacci;
}