【问题标题】:Javascript Euler Fibonacci for loopJavascript Euler Fibonacci for 循环
【发布时间】:2014-08-29 07:36:12
【问题描述】:

我正在做 Euler 项目问题 2,其中的目标是对值小于 400 万的斐波那契数列的偶数求和。我进行了一些搜索,并且看到了几种使用 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]

【问题讨论】:

  • 这甚至没有终止。第一个 for() 将挂起,因为条件 total&lt;=4000000 将始终为真。
  • 是的,循环不会终止。将第二个 for 循环嵌套在第一个循环中。

标签: javascript for-loop fibonacci


【解决方案1】:

首先for 是一个无限循环。您的条件必须是array[i-1] &lt; 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;
}

【讨论】:

  • 这是一个无限循环,因为 array[2]
  • 在你的问题中有 total
【解决方案2】:

我帮你修好了。

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);

我不确定你的终止条件应该是什么样的,你说价值小于 400 万,但这是模棱两可的。也许应该是total &lt;= 4000000data[i] &lt;= 4000000。你的措辞不够准确。

【讨论】:

    【解决方案3】:

    对不起,但对我来说,您的代码陷入了死循环。第一个“for”使用总计作为检查,但它从不增加。如果你想要这是一个基于动态编程和记忆技术的斐波那契序列的解决方案。

    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);
    

    【讨论】:

    • 您的条件无效,因为问题要求斐波那契序列的值小于4000000,您将使用第 4000000 个序列。 f0 也是 0
    猜你喜欢
    • 2020-10-10
    • 2011-07-12
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多