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
为什么会出现返回阶段的输出
递归的核心逻辑是先逐层进入深层调用,再逐层返回执行剩余代码,具体到这个函数的执行流程:
- 调用
azalt('12345'):执行第一个打印语句,接着调用azalt('2345'),此时azalt('12345')的代码并未执行完毕,卡在azalt(s[1:])这一行,等待子调用结束。 - 调用
azalt('2345'):重复上述操作,执行第一个打印后调用azalt('345'),自身代码暂停。 - 以此类推,直到调用
azalt('5'):执行第一个打印后,调用azalt('')。 - 调用
azalt(''):触发len(s)<1的终止条件,直接返回,这个子调用完成。 - 回到
azalt('5')的函数中:之前卡在子调用的位置现在可以继续向下执行,于是运行第二个打印语句,输出对应内容后,azalt('5')执行完毕并返回。 - 回到
azalt('45')的函数:同样执行剩余的第二个打印语句,输出后返回。 - 从最底层的
azalt('5')开始,逐层返回到上层函数,每个上层函数都会执行自己子调用之后的打印语句,直到回到最初的azalt('12345'),执行完最后一个打印,整个递归流程才彻底结束。
简单来说,递归不是调用完子函数就直接消失,每个函数调用都要把自身的代码全部执行完——包括子调用之后的语句,这就是你看到返回阶段输出的原因。
内容的提问来源于stack exchange,提问作者Furkan Ryuka
相关产品推荐
相关产品推荐

