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

递归实现factorial函数疑问:else分支j值为何成为乘数?

关于Python递归阶乘函数中else分支影响结果的疑问

我在使用Python递归实现factorial(阶乘)函数时遇到了困惑。

原代码如下:

def factorial(i):
  if(i):
    j = i * factorial(i-1)
  else:
    j = 1
  return j

运行结果:factorial(0)返回1,factorial(3)返回6。

当我将else分支的j = 1改为j = 2后,代码变为:

def factorial(i):
  if(i):
    j = i * factorial(i-1)
  else:
    j = 2
  return j

此时运行结果为:factorial(0)返回2,factorial(3)返回12,factorial(4)返回48。

请问为何else分支中j的值会成为乘数,进而影响最终的计算结果?


解答

这是因为else分支是递归的终止条件,它返回的值是整个递归乘法链的基准起始值。

递归计算阶乘的逻辑是层层拆解:计算factorial(n)时,会先去计算factorial(n-1),直到触发终止条件(i=0时进入else分支)。此时返回的数值会作为最内层的乘数,被外层的计算逐步累积相乘。

举个具体例子:

  • 原代码中,factorial(3)的计算链是:
    3 * factorial(2) → 3 * 2 * factorial(1) → 3 * 2 * 1 * factorial(0) → 3*2*1*1=6
  • 修改后,factorial(3)的计算链变成:
    3 * factorial(2) → 3 * 2 * factorial(1) → 3 * 2 * 1 * factorial(0) → 3*2*1*2=12

本质上,你把终止条件的返回值从1改成2,相当于给原本的阶乘结果乘了2(因为1和2的倍数差是2),自然会让所有n≥0的factorial(n)结果都变成原来的2倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:27:13