JavaScript递归阶乘函数返回undefined的原因解析
问题分析:递归函数返回undefined的原因
你的代码中factorial(5)最终输出undefined,核心问题是**rec函数在n>0的分支里没有返回值**,导致递归调用的返回链被中断。
执行流程拆解
- 调用
factorial(5),初始化result=1,接着调用rec(5)。 rec(5):n>0,执行result=1*5=5,然后调用rec(4),但这一步没有写return语句,所以rec(5)执行完毕后默认返回undefined。- 同理,
rec(4)到rec(1)的每一层调用,都是执行完递归后没有返回值,最终都返回undefined。 - 只有
rec(0)进入else分支,输出120并返回120,但这个返回值被上层的rec(1)忽略了,没有被继续向上传递。 - 最终
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
相关产品推荐
相关产品推荐

