斐波纳契序列印刷错误的价值

时间:2014-08-23 22:33:02

标签: 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 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实现有什么问题呢?

2 个答案:

答案 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 ...

由你决定你想要的序列。