各位前辈好,小弟这两天试着利用loop去写出费柏纳契数列function (0,1,1,2,3,5,8,…),写出了如下代码:
function fib(n) {
let arr = [0, 1];
for (let i = 2; arr.length >= n; i++) {
arr.push(arr[i-1]+arr[i-2]);
}
return arr;
}
console.log(fib(4));
结果应该是[ 0, 1, 1, 2, 3 ],但输出的结果却是错误的[ 0, 1 ],我手动算了很多次觉得应该要是对的,但不知道为什么是错的?
后来我发现,只要把for loop条件“arr.length<=n”答案就会是正确的;但我验算结果确是arr.length>=n才合理?
(由“预想的”结果反推,当fib(4)时,arr=[0,1,1,2,3],arr.length=5,所以理应是n<=arr.length才对呀?)
但我实在不懂为何我写arr.length>=n 时condition 会是false?我写了开始条件: i=2 ; 结束条件arr.length>=n,因为n=4,而arr.length是2 (arr=[0, 1, 1]) ;而由“预想的”结果反推,当fib(4)时,arr=[0,1,1,2,3],arr.length=5,所以理应是arr.length>=n才对呀?
作者:
laechan (挥泪斩马云)
2022-03-16 13:52:00在循环内加console.log,执行时不显示,一样能debug是循环出问题--就是循环连一次都没执行这例子就是 ;arr.length >= n; 除非n<=2, 不然都不会执行所以结论就是你写反了,用 ;arr.length<n; 去跑看看