为何仅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
相关产品推荐
相关产品推荐

