JavaScript fibonacci-RangeError:当基数(n == 1)或(n == 0)时,但如果(n <=)则不然。为什么?

时间:2018-09-24 08:10:48

标签: javascript

这很好:

function fibonacci(n) {
  if (n <= 1) {
    return n;
  } else {
    return fibonacci(n - 1) + fibonacci(n - 2);
  }
}
console.log('fibonacci ' + fibonacci(7));

但是如果我用(n == 1)或(n == 0)或什至(n === 1)替换底座。我得到一个RangeError。有人可以解释为什么吗?有趣的是,它可以使用简单的求和函数:

function sumTo(n) {
 if (n == 1) {
  return n;
 } else {
  return n + sumTo2(n - 1);
 }
}

2 个答案:

答案 0 :(得分:1)

您需要同时检查n === 1 || n === 0,因为您使用两个值n - 1n - 2接听电话。

function fibonacci(n) {
  if (n === 1 || n === 0) {
    return n;
  } else {
    return fibonacci(n - 1) + fibonacci(n - 2);
  }
}
console.log('fibonacci ' + fibonacci(7));

答案 1 :(得分:0)

它应该适用于n==1 || n==0

function fibonacci(n) {
  if (n == 1 || n==0) {
    return n;
  } else {
    return fibonacci(n - 1) + fibonacci(n - 2);
  }
}

对于n===1无效 因为对于n = 2,第二个呼叫将转到n-20就是您未处理的内容