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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:18:01