深度嵌套数组整数求和递归函数未通过大深度单元测试排查
问题根因
原有代码的求和逻辑本身没有错误,单测失败的核心原因是JavaScript运行时存在调用栈深度限制:
- 主流JavaScript引擎(比如Node.js、Chrome使用的V8引擎)默认的函数递归调用栈深度上限约为1万左右,单测构造的10万层嵌套深度远超这个阈值
- 每递归调用一次
arraySum处理下一层嵌套,JS引擎就会向调用栈压入一个新的函数执行上下文,当嵌套深度超过栈上限时会直接抛出RangeError: Maximum call stack size exceeded错误,中断代码执行导致测试失败。
修复方案
将递归实现改为手动维护栈的迭代实现,绕过引擎调用栈的深度限制即可:
export const arraySum = (arr) => { let sum = 0; const traverseStack = [arr]; while (traverseStack.length) { const currentNode = traverseStack.pop(); for (const item of currentNode) { if (typeof item === "number") { sum += item; } else if (Array.isArray(item)) { traverseStack.push(item); } } } return sum; };
该实现的求和逻辑和原递归版本完全等价,只是把引擎隐式维护的函数调用栈替换成了堆内存中存储的数组栈,数组长度仅受可用堆内存限制,足以支撑百万级深度的嵌套数组处理,可直接通过对应单测。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

