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

JavaScript递归阶乘函数返回undefined的原因解析

问题分析:递归函数返回undefined的原因

你的代码中factorial(5)最终输出undefined,核心问题是**rec函数在n>0的分支里没有返回值**,导致递归调用的返回链被中断。

执行流程拆解

  1. 调用factorial(5),初始化result=1,接着调用rec(5)。
  2. rec(5):n>0,执行result=1*5=5,然后调用rec(4),但这一步没有写return语句,所以rec(5)执行完毕后默认返回undefined。
  3. 同理,rec(4)到rec(1)的每一层调用,都是执行完递归后没有返回值,最终都返回undefined。
  4. 只有rec(0)进入else分支,输出120并返回120,但这个返回值被上层的rec(1)忽略了,没有被继续向上传递。
  5. 最终factorial(5)拿到的是rec(5)返回的undefined,所以console.log(factorial(5))输出undefined。

修复方案

只需要在n>0的分支里添加return语句,把结果向上传递即可:

const factorial = n => {
  let result = 1;
  const rec = (n) => {
    if(n>0) {
      result = result * n;
      rec(n-1);
      return result; // 添加return,返回计算后的result
    } else {
      console.log(result)
      return result;
    }
  }
  return rec(n);
};

console.log(factorial(5)) // 输出:120 120

或者更纯粹的递归写法(去掉外部变量,让递归函数自己维护状态):

const factorial = n => {
  const rec = (n, current) => {
    if(n>0) {
      return rec(n-1, current * n); // 直接返回递归调用的结果
    } else {
      console.log(current)
      return current;
    }
  }
  return rec(n, 1);
};

console.log(factorial(5))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:10:16