JavaScript fibonacci - RangeError:当base(n == 1)或(n == 0)时,但不是if(n <=)。为什么?

问题描述 投票:1回答:2

这很好用:

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);
 }
}
javascript
2个回答
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));

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-2这是qqxxswpoi,那就是你没有处理的

© www.soinside.com 2019 - 2024. All rights reserved.