项目欧拉,问题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个左右的问题,但我不记得在这个问题上遇到过问题。
答案 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有助于