Java 斐波那契序列打印错误值
斐波那契在Java中的实现:Java 斐波那契序列打印错误值,java,Java,斐波那契在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 mai
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();
}
}
那么,我的Java实现有什么问题吗?Java中的fibonacciint n将为n=0返回0。您希望始终为n返回1这与语言无关 第一个返回序列0112355813 第二个返回序列111235813
由您决定要哪个序列。是的,我知道,第一个序列返回n而不是1,其中n可以是0。这是一个疏忽,事实上,两者都被使用了。很抱歉,我只是看了一下序列,以为我看到了别的东西。我知道这与语言无关。我只是想知道为什么它们是不同的输出,很明显其中一个有问题。@JohnMerlino在我的第一条评论中看到了链接。这两个序列都被使用。是的,除了决定需要哪个序列外,还必须决定是调用第一个元素F[0]还是F[1],即fibonacci0还是fibonacci1。
fibonacci(4)
fibonacci(3) fibonacci(2)
fibonacci(2) fibonacci(1) fibonacci(1) fibonacci(0)
fibonacci(1) fibonacci(0) 1 1 1
1 1
return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
return n < 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2);
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