我的代码结果是无穷无尽的数字"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“
我应该如何更改我的代码以使其正常工作?
发布于 2019-05-28 05:35:42
您正在使用常量递归!改变这一点
long fibonacci = fibonacci(-1) + fibonacci(-2);
至
long fibonacci = fibonacci(fibonacciNumberInOrder-1) + fibonacci(fibonacciNumberInOrder-2);
而且,在main
中的while
循环中,您需要修改fibonacciNumberInOrder
int fibonacciNumberOrder = 1;
do {
System.out.print(fibonacci(fibonacciNumberOrder) + " ");
fibonacciNumberOrder++;
} while (true);
发布于 2019-05-28 05:36:40
这是因为你用常量计算斐波那契数,而不是传递给1的相对数,这就是递归点。
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;
}
更改后的密钥行为:
long fibonacci = fibonacci(fibonacciNumberInOrder-1) + fibonacci(fibonacciNumberInOrder-2);
https://stackoverflow.com/questions/56332627
复制相似问题