[英]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.