JavaScript递归方法查找数组奇数出现调用栈报错问题排查
JavaScript递归查找数组奇数报错问题修复
报错翻译
你提供的报错存在输入笔误,JavaScript中无限递归触发的标准调用栈报错为maximum call stack size exceeded,翻译为:最大调用栈大小溢出。
代码错误点
- 递归终止条件完全失效:你设置的终止条件为
inputArray.length === 0,但每次递归调用时传递的都是完整的原始数组array,数组长度永远不会为0,永远无法触发终止逻辑,导致无限递归。 - 索引使用逻辑错误:你使用外层作用域的全局索引
i做递增,当i超过数组长度后,inputArray[i]返回undefined,undefined % 2的结果为NaN,不会触发奇数判断逻辑,也不会终止递归。 - 结果存储逻辑错误:初始
result声明为数组,但匹配到奇数时直接将result赋值为单个奇数,最终只能返回最后一个匹配到的奇数,无法返回所有奇数的集合。
修复后代码
function findOddNum(array) { const result = []; let i = 0; function helper_func(inputArray) { // 修改终止条件:索引超出数组长度就终止递归 if (i >= inputArray.length) return; if (inputArray[i] % 2 !== 0) { // 匹配到奇数推入结果数组,不覆盖整个result变量 result.push(inputArray[i]); } i++; // 传递当前处理的数组,而非固定引用外层array helper_func(inputArray); } helper_func(array); return result; } const res = findOddNum([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); console.log(res); // 输出:[1,3,5,7,9]
内容的提问来源于stack exchange,提问作者Amaan Ansari
相关产品推荐
相关产品推荐

