甚至小于4密尔的斐波那契数之和:我试图使用JavaScript来实现,但是我得到了无限性作为答案
但是如果我使用10之类的小数字,我将得到带有结果的console.log()输出,是否可以在JavaScript中完成?
var fib = [1, 2];
for(var i =fib.length; i<4000000; i++)
{
fib[i] = fib[i-2] + fib[i-1];
}
//console.log(fib);
var arr_sum = 0;
for(var i = 0; i < fib.length; i++){
if(fib[i] % 2 === 0){
arr_sum += fib[i] ;
}
}
console.log(arr_sum);
答案 0 :(得分:0)
在进行编码之前,有两件事:
您需要将斐波那契数的偶数相加,其值低于400万(@Alnitak)
有一个“偶数斐波那契数列”,可以用see here的另一种方式来计算。
好的,我们开始:
let fib = [0, 2];
for(let i = 2; fib[i-1] < 4000000; i++) {
fib[i] = 4 * fib[i - 1] + fib[i - 2];
}
fib.pop()
let sum = fib.reduce((a, c) => a + c, 0);
console.log(sum);
修改
没有我刚刚添加的fib.pop()
,数组的最后一个元素将是数字> 4000000
。现在您应该可以获得正确的结果。
答案 1 :(得分:0)
这就是问题所在:
斐波纳契序列中的每个新术语都是通过将前两个术语相加而生成的。从1和2开始,前10个术语将是:
1、2、3、5、8、13、21、34、55、89,...
通过考虑斐波那契数列中值不超过400万的项,找到偶数项的和。
正确答案是4613732。
在下面的脚本中,答案将来自变量“ sum”。我给它分配了一个初始值2,因为它是序列中的第一个偶数。我使用了另外3个变量来遍历此序列。循环运行正常的斐波那契数列,并且if语句过滤偶数并将其加到总和。
我认为这是最简单,最直观的代码实现。
var sum = 2;
var x = 1, y = 2, fib;
while(x < 4000000) {
fib = x + y;
x = y;
y = fib;
if(fib%2===0) sum += fib;
}
console.log(sum);