-3
class fibo {

    //int firstNumber = 0;

    public static void main(String args[]){
        //int firstNumber = 0;
        int length = 4000000;
        int[] series = new int[length]; 
        //long[] sum = new long[4000000];
        long sum =0;
        series[0] = 0;
        series[1] = 1;
        for (int i = 2; i<4000000; i++){
            //firstNumber  = firstNumber + i;
            //System.out.println("fibo" + i);
            series[i] = series[i-1] + series[i-2];


            if(series[i] %2 == 0) {
                sum = sum + series[i];

            }

        }

        for(int j=0;j<length; j++){
            System.out.println("fibo Series" + series[j]);
        }               

    }

}

我得到了答案,但方法不同。这段代码有什么问题?任何人都可以对此有所了解。

当长度为 10 时,相同的代码有效。我对此没有任何期望,但答案似乎不同。它的东西 -92719184589087346 是不正确的。

4

2 回答 2

4

这段代码有什么问题?

好吧,它取前 400 万斐波那契数内的偶数之和,而不是小于 400 万的斐波那契数列中的偶数之和。

它还无缘无故地创建了它所看到的所有斐波那契数字的数组:您一次只需要最后两个,因此您可以在恒定空间中执行此操作

于 2012-08-21T16:51:33.563 回答
1

我猜你想得到总和少于 400 万的总和?因为那不是你要计算的。您正在计算完全不同的第 4 百万个指数的总和。

您的答案错误的原因(除了您的逻辑错误)是 long 不能适合您正在计算的数字。斐波那契数列中的第 4 百万个条目是一个非常大的数字,以至于超出了您的多头。溢出将使其回绕到负片中(可能多次)。

于 2012-08-21T16:57:45.047 回答