我写了一个斐波那契序列javascript解决方案。我能够推出斐波那契序列数组。但是,此解决方案在数组中添加一个超出限制数量的额外数字。

例如,如果我希望数组中的所有数字都小于10,则数组应为[0、1、1、2、3、5、8]。但是,使用我的解决方案,它仍然在数组中输出额外的“13”。

function fib(num) {
var x = 0;
var y = 1;
var fibarray = [0, 1];

while(y < num) {
    y += x;
    x = y - x;
    fibarray.push(y);
}

return fibarray;
}
console.log(fib(10));


我不明白为什么当它不应该作为“13”大于“10”时输出“13”。请帮助我解决此问题。

最佳答案

发生这种情况是因为您正在计算下一个y,将其推入数组,然后检查y是否小于num,但到那时您已经将y添加到了fibarray中。解决方案是检查y是否小于num,然后将其推入fibarray,然后计算下一个y,然后再次检查条件。

function fib(num) {
var x = 0;
var y = 1;
var fibarray = [0];

while(y < num) {
    fibarray.push(y);
    y += x;
    x = y - x;
}

return fibarray;
}
console.log(fib(10));

10-06 04:51