如何用递归实现检查数组内所有数字元素均为偶数的功能?
错误原因
- 你的递归逻辑缺失了当前层级第一个数组元素的奇偶判断,错误地将递归返回的布尔值参与取模运算,布尔值在参与算术运算时会被隐式转换为数字:
true转1,false转0,导致整个判断逻辑完全偏离预期。 - 以你出错的测试用例
[2,4,6,9]为例,递归到最后一层处理[9]时,会先调用isEven([])得到true,计算true % 2 === 0得到false,再往上回溯时false % 2 === 0会被判定为true,最终层层返回错误的true结果。
正确递归实现
递归的核心逻辑应该是:
- 基线条件:数组为空时,视为所有元素都满足条件,返回
true - 递归条件:当前第一个元素是偶数 并且 剩余子数组的所有元素都是偶数
正确代码如下:
const isEven = (arr) => arr.length === 0 ? true : arr[0] % 2 === 0 && isEven(arr.slice(1)); console.log(isEven([2,4,6,8])); // true console.log(isEven([2,4,6,9])); // false
内容的提问来源于stack exchange,提问作者noirsociety
相关产品推荐
相关产品推荐

