这很好:
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);
}
}
答案 0 :(得分:1)
您需要同时检查n === 1 || n === 0
,因为您使用两个值n - 1
和n - 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-2
,0
就是您未处理的内容