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

递归实现阶乘问题专业讲解请求(已解决,助初学者学习)

递归实现阶乘的分步计算详解

先看阶乘的递归实现代码:

def fact(n):
    if n==1:
        return 1
    else:
        return n*fact(n-1) 

以n=5为例,分步拆解递归执行过程

递归的核心是先“递”下去拆解问题,再“归”回来合并结果,我们分两个阶段来看:

1. 递推阶段(拆解问题)

每次调用fact(n)时,只要n≠1,就会暂停当前函数的执行,转而调用fact(n-1),直到触发终止条件:

  • 调用fact(5):5≠1,执行return 5 * fact(4),暂停fact(5),进入fact(4)
  • 调用fact(4):4≠1,执行return 4 * fact(3),暂停fact(4),进入fact(3)
  • 调用fact(3):3≠1,执行return 3 * fact(2),暂停fact(3),进入fact(2)
  • 调用fact(2):2≠1,执行return 2 * fact(1),暂停fact(2),进入fact(1)
  • 调用fact(1):n==1,触发终止条件,直接返回1

2. 回溯阶段(计算并返回结果)

当底层的fact(1)返回后,之前暂停的函数会依次恢复执行,完成乘法运算并返回结果:

  • fact(2)拿到fact(1)返回的1,计算2*1=2,返回2给fact(3)
  • fact(3)拿到fact(2)返回的2,计算3*2=6,返回6给fact(4)
  • fact(4)拿到fact(3)返回的6,计算4*6=24,返回24给fact(5)
  • fact(5)拿到fact(4)返回的24,计算5*24=120,最终返回120

关键知识点总结

  • 终止条件:if n==1: return 1是递归的核心,没有它会导致无限递归(函数一直调用自身直到栈溢出)
  • 调用栈机制:递归调用会被操作系统以栈的形式管理,每次新调用压栈,终止条件触发后开始出栈计算
  • 运算时机:乘法操作都发生在回溯阶段,也就是从最底层的终止结果开始,逐层向上合并计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:55:17