为什么JS中递归执行顺序不符合预期?阶乘递归函数相关疑问
阶乘递归疑问解答
你的误解核心是搞错了阶乘递归的终止规则,本质是对阶乘的基础定义认知有偏差:
- 数学上明确约定
0! = 1,不是你以为的0! = 0。这个约定是为了保证阶乘计算逻辑的自洽,比如计算排列组合C(n,n) = n!/(n!*0!),如果0!是0的话这个公式就无法成立。 - 你使用的
factorial(x)递归函数的终止条件必然是当入参等于0时返回1,而非返回0,我们可以用factorial(1)的完整执行流程验证:- 调用
factorial(1),匹配递归逻辑,返回1 * factorial(0) - 调用
factorial(0),匹配终止条件,直接返回1 - 代入上一层计算得到
1 * 1 = 1,和实际运行结果完全一致
- 调用
- 要是按照你以为的终止逻辑,x=0时返回0,那所有正整数的阶乘计算结果都会变成0,完全不符合阶乘的定义,这也是为什么递归终止条件会设置为0返回1的核心原因。
内容的提问来源于stack exchange,提问作者Gabriel Rogath
相关产品推荐
相关产品推荐

