Javascript Euler Fibonacci for循环

时间:2014-08-29 07:36:12

标签: javascript for-loop fibonacci

我正在做欧拉项目问题2,其中目标是对具有小于4百万的值的斐波纳契序列的偶数求和。我搜索了一下,我已经看到了几个使用while循环的解决方案,但没有简单的使用for循环。我很好奇为什么我用以下代码返回零:

var array = [];
array[0] = 0;
array[1] = 1;

var total = 0;

for(var i=2;total<=4000000;i++) {
array[i] = array[i-1] + array[i-2];};


for(var x=0;x<array.length;x++){
if(array[x]%2 === 0){
total += array[x]};};

alert(total);

我猜这个问题是在我的for循环中使用total变量。我无法使用array [i]&lt; = 4000000来工作,我真的很好奇这背后的原因。有谁知道这是为什么?我可以在for循环条件(第二个语句)中更改以获得正确的总数吗?

3 个答案:

答案 0 :(得分:1)

我为你修好了。

var i, data = [ 0, 1 ], total = 0;

for (i = 2; i <= 4000000; i++)
{
    data[i] = data[i - 1] + data[i - 2];

    if (data[i] % 2 === 0)
    {
        total += data[i];
    }
}

alert(total);

我不确定你的终止条件是什么样的,你说的值小于4百万,但这是不明确的。也许它应该是total <= 4000000data[i] <= 4000000。你的措辞不够准确。

答案 1 :(得分:1)

首先,for首先存在无限循环。您的病情必须是array[i-1] < 4000000。之后,你的第二个for循环将找到正确的结果。

同样针对这个问题,您不需要存储所有斐波那契数字,然后找到偶数的总和。 你可以在计算斐波纳契时计算总和。

var first = 0;
var second = 1;
var sum = 0;

for(var current=first+second; current < 4000000; current = first+second){
    if(current%2 === 0){
        sum+=current;
    }
    first = second;
    second = current;
}

答案 2 :(得分:0)

很抱歉,但对我来说,你的代码会陷入死循环。首先“for”使用总数作为检查,但它永远不会增加。如果你想这是一个基于dinamic编程和memoization tecnic的fibonacci序列的解决方案。

var f1 = 1;
 var f2 = 1;

 for(var i = 2; i < 40000; i++){
  console.info(i, f1, f2);
  var temp = f1 + f2;
  f1 = f2;
  f2 = temp;
 }

 alert(f2);