为什么javascript错误堆栈只用于一个循环



为什么n=1也会出现错误堆栈?

function f(n) {
const f1 = f(n - 1);
const f2 = f(n - 2);
return n == 0 ? 0 : (n == 1 ? 1 : f1 + f2);
}
console.log(f(1));

因为你的基本情况条件是在你执行递归调用之后,你总是会碰到第一行,函数会调用自己,然后第一行会运行,函数会永远调用自己。在进行任何无条件递归之前,您需要您的基本情况条件语句(请注意,我已经用下面的定义替换了f1f2):

function f(n) {
return n == 0 ? 0 : (n == 1 ? 1 : f(n - 1) + f(n - 2));
}
console.log(f(1));

这可能有点整洁(单独处理基本情况,然后返回两个递归组件的总和):

function f(n) {
if (n == 0) return 0;
if (n == 1) return 1;
const f1 = f(n - 1);
const f2 = f(n - 2);
return f1 + f2;
}
console.log(f(1));

相关内容