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

为何递归调用函数前必须加return才能获取正确输出?

递归判断奇偶函数返回undefined的原因

你写的递归函数之所以返回undefined,核心问题出在递归调用时没有返回结果:

当n既不是0也不是1时,你只是执行了isEven(n - 2)这个递归调用,但没有把这个调用得到的true或false返回给上一层函数。JavaScript规定,如果函数执行流程结束时没有遇到return语句,就会默认返回undefined。

举个例子,调用isEven(50)时,函数会一层层调用isEven(48)、isEven(46)……直到isEven(0)返回true。但这个true只会返回到调用它的上一层isEven(2),而isEven(2)里只是执行了isEven(0),没写return,所以isEven(2)会返回undefined,接着这个undefined又返回到isEven(4),最终传到最外层的isEven(50),结果自然就是undefined。

修正后的代码应该在递归调用前加上return,确保每一层都把内层的结果传递出去:

function isEven(n) {
  if (n == 0)
    return true;
  else if (n == 1)
    return false;
  else
    return isEven(n - 2);
}

这样,当isEven(0)返回true时,isEven(2)会把这个true返回给isEven(4),一层层传递下去,最终isEven(50)就能得到正确的true结果。

内容的提问来源于stack exchange,提问作者BJ Dunc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:20:32