我的代码准确性有问题。
我做了一个函数来计算斐波那契数列:
function fibonacciseries(max_number, p, n) {
if(p === undefined) { p = 0;}
if(n === undefined) { n = 1;}
if(n > max_number) { return 0; }
console.log(n);
return fibonacciseries(max_number, n, n + p)
}
fibonacciseries(3)
但是当我运行此代码时,
console.log(n);
显示:1
1
2
3
我认为结果应该是
1 1 2
,所以我真的不明白为什么会发生这种情况。运行fibonacciseries(4)
和fibonacciseries(5)
可以,那么fibonacciseries(3)
怎么了?我该如何解决? 最佳答案
您似乎希望max_number
是该函数应该记录多少个数字的计数,但是实际上它正在记录所有小于或等于max_number
的斐波那契数字。也就是说,fibonacciseries(20)
不会记录20个数字,它会记录所有小于或等于20的斐波那契数。这只是一个巧合,fibonacciseries(4)
和fibonacciseries(5)
碰巧会产生相同的结果。
要解决此问题,请不要将max_number
与n
进行比较,仅在每次调用时递减max_number
,并在其变为零时停止。为了更清楚一点,我建议重命名该参数:
function fibonacciseries(count, p, n) {
if(p === undefined) { p = 0;}
if(n === undefined) { n = 1;}
if(count <= 0) { return 0; }
console.log(n);
return fibonacciseries(count - 1, n, n + p)
}
console.log("Count of 3:");
fibonacciseries(3);
console.log("Count of 5:");
fibonacciseries(5);
console.log("Count of 7:");
fibonacciseries(7);