在Java中实施斐波纳契:
public class Fibonacci {
private int fibonacci(int n){
return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
}
private void test(){
System.out.println(fibonacci(4));
}
public static void main(String[] args) {
Fibonacci test = new Fibonacci();
test.test();
}
}
在Ubuntu上使用Oracle Java 8,它在Eclipse中打印出3个。但我期待5:
fibonacci(4)
fibonacci(3) fibonacci(2)
fibonacci(2) fibonacci(1) fibonacci(1) fibonacci(0)
fibonacci(1) fibonacci(0) 1 1 1
1 1
那么我的Java实现有什么问题呢?
答案 0 :(得分:4)
您的fibonacci(int n)
in Java将为n=0
返回0。您希望始终返回1
n&lt; 2。替换:
return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
与
return n < 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2);
目前看来,评估如下:(f是斐波那契的缩写)
f(4)
f(3)+f(2)
(f(1)+f(2))+(f(0)+f(1))
(1+(f(0)+f(1)))+(0+1)
(1+0+1)+(0+1)
2+1
3
以下应该:
f(4)
f(3)+f(2)
(f(1)+f(2))+(f(0)+f(1))
(1+(f(1)+f(1)))+(1+1)
(1+1+1)+(1+1)
3+2
5
答案 1 :(得分:2)
这与语言无关。
第一个返回序列0 1 1 2 3 5 8 13 ...
第二个返回序列1 1 2 3 5 8 13 ...
由你决定你想要的序列。