超过了Javascript最大调用堆栈


'use stict';
function sumToRecursive(n) {
if (n === 1) {
return 1;
}
return n + sumToRecursive(n - 1);
}
function measureFunctionSpeed(f) {
let start = Date.now();
for (let i = 0; i <= 10; i++) {
f(i);
}
let end = Date.now();
return end - start;
}
console.log(measureFunctionSpeed(sumToRecursive));

当我尝试运行上面的代码时,我收到了一个"超过最大调用堆栈"错误,但我了解到最大调用堆栈限制约为10000。我的代码最多可以深入10个递归级别,但会抛出相同的错误。有人知道为什么吗?

执行结果截图

循环的第一次迭代将函数0作为i提供,这在基本情况中没有涵盖。

您可以从i= 1开始for循环,也可以将基本事例检查更改为if (n <= 1) {}以覆盖0事例。

最新更新