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

Python递归函数执行流程疑惑:返回阶段输出原因解析

递归函数执行流程解析

首先看你提供的递归函数代码:

def azalt(s):
    if len(s) < 1:
        return s
    else:
        print('özyinelemesürecine girerken:', s)
        azalt(s[1:])
        print('özyinelemesürecinden çıkarken:', s)

azalt('12345')

实际执行输出

özyinelemesürecine girerken: 12345
özyinelemesürecine girerken: 2345
özyinelemesürecine girerken: 345
özyinelemesürecine girerken: 45
özyinelemesürecine girerken: 5
özyinelemesürecinden çıkarken: 5 
özyinelemesürecinden çıkarken: 45
özyinelemesürecinden çıkarken: 345
özyinelemesürecinden çıkarken: 2345
özyinelemesürecinden çıkarken: 12345

你预期的输出

özyinelemesürecine girerken: 12345
özyinelemesürecine girerken: 2345
özyinelemesürecine girerken: 345
özyinelemesürecine girerken: 45
özyinelemesürecine girerken: 5

为什么会出现返回阶段的输出

递归的核心逻辑是先逐层进入深层调用,再逐层返回执行剩余代码,具体到这个函数的执行流程:

  1. 调用azalt('12345'):执行第一个打印语句,接着调用azalt('2345'),此时azalt('12345')的代码并未执行完毕,卡在azalt(s[1:])这一行,等待子调用结束。
  2. 调用azalt('2345'):重复上述操作,执行第一个打印后调用azalt('345'),自身代码暂停。
  3. 以此类推,直到调用azalt('5'):执行第一个打印后,调用azalt('')。
  4. 调用azalt(''):触发len(s)<1的终止条件,直接返回,这个子调用完成。
  5. 回到azalt('5')的函数中:之前卡在子调用的位置现在可以继续向下执行,于是运行第二个打印语句,输出对应内容后,azalt('5')执行完毕并返回。
  6. 回到azalt('45')的函数:同样执行剩余的第二个打印语句,输出后返回。
  7. 从最底层的azalt('5')开始,逐层返回到上层函数,每个上层函数都会执行自己子调用之后的打印语句,直到回到最初的azalt('12345'),执行完最后一个打印,整个递归流程才彻底结束。

简单来说,递归不是调用完子函数就直接消失,每个函数调用都要把自身的代码全部执行完——包括子调用之后的语句,这就是你看到返回阶段输出的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:22:50