为什么函数变量返回错误计算?

时间:2018-06-10 09:28:20

标签: javascript function variables math

我的代码准确性存在问题 我做了一个计算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)的情况有什么问题?我该如何解决这个问题?

2 个答案:

答案 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_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);