我的代码准确性存在问题 我做了一个计算Fibonacci系列的函数:
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)
的情况有什么问题?我该如何解决这个问题?
答案 0 :(得分:1)
检查n>=max_number
而不是n>max_number
。请尝试以下更新的代码
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)

答案 1 :(得分:0)
您似乎希望max_number
计算函数应记录的数量,但它实际上做的是记录小于或等于max_number
的所有Fibonacci数。也就是说,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);