我的代码结果以无穷大的数字“ 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”
如何更改代码以使其正常工作?
答案 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;
}