You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何仅10层递归却触发JavaScript Maximum Call Stack Exceeded错误?

问题分析与解决

你的代码触发调用栈溢出的原因很明确:递归函数sumToRecursive的终止条件仅判断n === 1,但measureFunctionSpeed的循环里i从0开始执行。当调用sumToRecursive(0)时,不满足终止条件,会执行return 0 + sumToRecursive(-1),后续sumToRecursive(-1)又会调用sumToRecursive(-2),以此类推永远触发不到终止条件,递归无限进行,最终导致栈溢出。

修复方案

调整递归终止条件,覆盖n≤1的情况即可解决:

'use strict';

function sumToRecursive(n) {
  // 当n小于等于1时直接返回n,避免无限递归
  if (n <= 1) {
    return n;
  }

  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));

内容的提问来源于stack exchange,提问作者bar_ok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:35:22