如何编写递归JS函数:输入两整数返回区间数组及栈溢出报错解决
代码报错原因分析
- 递归终止条件错误:原代码仅设定
startNum === 0 && endNum === 0时返回空数组作为终止条件,但题目中输入的startNum可以是任意小于等于endNum的整数,例如输入(3,6)时,递归过程中startNum会持续自增1,永远无法满足两个参数都为0的终止条件,导致递归无限执行,最终触发调用栈溢出的报错。 - 数组构造逻辑错误:原代码的返回数组写法存在两处问题:
- 直接将递归调用返回的数组作为单个元素放入新数组,最终会得到多层嵌套的数组结构,不符合题目要求的一维数组格式
- 对数值类型的
endNum使用扩展运算符...,扩展运算符不能直接作用于非可迭代对象(比如数字),本身属于逻辑错误
正确实现参考
function rangeOfNumbers(startNum, endNum) { // 终止条件:两个参数相等时直接返回仅包含该数的数组 if (startNum === endNum) { return [startNum] } // 拼接当前数 + 递归返回的后续数组 return [startNum, ...rangeOfNumbers(startNum + 1, endNum)] }
内容的提问来源于stack exchange,提问作者kandé
相关产品推荐
相关产品推荐

