我写了一个斐波那契序列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));