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

Python递归原理解析及字符串反转代码执行流程疑问解答

Python递归原理与字符串反转递归代码执行流程解析

递归的核心原理

递归本质是函数自身调用自身,核心依赖两个条件:

  • 基线条件:触发递归终止的边界情况,避免无限循环。
  • 递归条件:将原问题拆解为更小的子问题,通过调用自身解决子问题。
    递归执行分为两个阶段:先递推(逐层调用自身,直到触达基线条件),再回溯(从基线条件开始,逐层将子问题的结果拼接/计算,最终得到原问题的答案)。

你的字符串反转代码执行流程详解

先看你的代码:

def func(mString: str):
    if len(mString) == 0:
        return mString

    else:
        print("Once")
        return func(mString[1:]) + mString[0]


reversed_str = func("Hello")
print(reversed_str)

递推阶段(逐层拆解问题)

从func("Hello")开始,每一层都进入else分支,先打印"Once",再调用更短的子字符串:

  1. func("Hello") → 长度≠0,打印"Once",调用func("ello"),等待其返回结果后拼接"H"。
  2. func("ello") → 长度≠0,打印"Once",调用func("llo"),等待结果后拼接"e"。
  3. func("llo") → 长度≠0,打印"Once",调用func("lo"),等待结果后拼接"l"。
  4. func("lo") → 长度≠0,打印"Once",调用func("o"),等待结果后拼接"l"。
  5. func("o") → 长度≠0,打印"Once",调用func(""),等待结果后拼接"o"。
  6. func("") → 长度=0,触发基线条件,直接返回空字符串""。

回溯阶段(逐层拼接结果)

当最内层的func("")返回空字符串后,之前的每一层调用都还停在return func(...) + mString[0]的等待状态,现在开始逐层返回结果:

  1. func("o")拿到func("")的返回值,计算"" + "o",返回"o"。
  2. func("lo")拿到"o",计算"o" + "l",返回"ol"。
  3. func("llo")拿到"ol",计算"ol" + "l",返回"oll"。
  4. func("ello")拿到"oll",计算"oll" + "e",返回"olle"。
  5. func("Hello")拿到"olle",计算"olle" + "H",返回"olleH",赋值给reversed_str。

关于你调试时的疑惑解释

你看到进入if分支返回空字符串后,紧接着进入else分支返回字符,这是因为回溯过程的存在。递推阶段时,每一层else分支的return func(...) + mString[0]并没有执行完拼接操作——它必须等内层的func调用返回结果才能完成。当最内层返回空字符串后,调试器会依次回到上一层的else分支,执行剩余的拼接逻辑并返回结果,直到回到最外层的调用。这不是“重新进入else分支”,而是之前的else分支逻辑还没执行完,现在继续完成后续步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:08:15