繁体   English   中英

为什么这是无限循环? (JavaScript的)

[英]why this is infinite loop? (javascript)

创建一个斐波那契数字数组:

function sumFibs(num) {
  var list = [1,1];
  var next = list[list.length-1] + list[list.length-2];

  while (true) {
    if (next<=num) {
      list.push(next);
    } else {
    return list;
    }
  }
}

sumFibs(10);

这给了我无限循环。

如果我添加next = list[list.length-1] + list[list.length-2]; list.push(next);之后list.push(next); 它工作正常。 为什么?

next变量不会在每次引用时更新。 如果确实如此,请想象程序将是多么令人困惑。

您可以将列表的最后一个成员的评估移到循环中。

 function sumFibs(num) { var list = [1, 1]; var next = list[list.length - 1] + list[list.length - 2]; while (true) { if (next <= num) { list.push(next); next = list[list.length - 1] + list[list.length - 2] } else { return list; } } } console.log(sumFibs(10)); 

这是一个不依赖循环的不同实现。

 function sumFibs(num) { return f(num, [1, 1]); function f(n, arr) { var next = arr[arr.length - 1] + arr[arr.length - 2]; return next <= num ? f(n, arr.concat(next)) : arr; } } console.log(sumFibs(10)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM