我的代码准确性有问题。
我做了一个函数来计算斐波那契数列:

  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_numbern进行比较,仅在每次调用时递减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);

07-26 07:36