项目欧拉 - 试图通过P.E.改善我的Javascript,坚持2号

时间:2014-08-05 14:24:01

标签: javascript

项目欧拉,问题2:

  

Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。从1和2开始,前10个术语将是:

     

1,2,3,5,8,13,21,34,55,89,......

     

通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和。

到目前为止我的代码:

var fib = [1,2];

var x = 0,
    y = 1,
    z = 0,
    ans = 0;

while (true){
    z = fib[x++] + fib[y++];
    fib.push(z);

    if ( !(z & 1) ) {
        console.log(z + ' is even');
        ans += z;
    };

    if(z > 4000000){
        break;
    }
}

console.log('answer = ' + ans);

我的控制台打印出来:

8 is even
34 is even
144 is even
610 is even
2584 is even
10946 is even
46368 is even
196418 is even
832040 is even
3524578 is even

answer = 4613730

有人看到我的代码有问题吗?我前一段时间使用Java完成了前10个左右的问题,但我不记得在这个问题上遇到过问题。

2 个答案:

答案 0 :(得分:1)

作为Daniel said,您忘记了第一个2,将初始值写为[1, 0]或使用此类生成器可能更好

var fib = (function () {
    var a = 1, b = 0, c = 0;
    return function () {
        c = a + b;
        a = b;
        return b = c;
    };
}());

var i, t = 0;
while ((i = fib()) < 4000000) {
    if ((i & 1) === 0) {
        t += i;
    }
}
t; // 4613732

Fibonacci序列实际上启动了1, 1, 2, 3 ..

答案 1 :(得分:-1)

你忘记了第一个&#34; 2&#34;

也许将z initial设置为2有助于......

修改 我错了! 将 ans 首字母设置为2有助于