创建一个fibonachi数字数组:
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);
,则可以正常使用。
为什么呢?
答案 0 :(得分:1)
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));
&#13;
这是一个不依赖于循环的不同实现。
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));
&#13;