JavaScript递归实现isEven奇偶判断时除0和1外返回undefined如何解决
问题原因
你的递归判断逻辑本身没有问题,报错核心原因是else分支没有返回递归调用的执行结果。
在JavaScript中,函数如果没有显式书写return语句指定返回值,执行完成后会默认返回undefined。你当前的代码仅在N等于0或1的场景下有明确的返回值,当N大于1时,你只是触发了isEven(N-2)的递归调用,但是没有把这个调用的结果返回给上层调用方,所以最终拿到的结果就是undefined。
修正后的代码
function isEven(N){ if(N===0){ return true; }else if(N===1){ return false; }else { // 新增return,将递归结果向上传递 return isEven(N-2); } } console.log(isEven(1)); // 输出 false console.log(isEven(0)); // 输出 true console.log(isEven(10)); // 输出 true
可选优化(兼容负数输入)
如果需要支持负整数的偶数判断,可以先对参数取绝对值再执行递归,避免负参数导致栈溢出:
function isEven(N){ const num = Math.abs(N); if(num === 0) return true; if(num === 1) return false; return isEven(num - 2); }
内容的提问来源于stack exchange,提问作者Smail Nekab
相关产品推荐
相关产品推荐

