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

Python递归函数输出解析求助:为何会打印1到10?

搞懂递归的“回溯”阶段就明白了!

嘿,刚学递归的时候卡在这里太正常了!我当初第一次接触递归也跟你一样,只看明白了“一直减到1”的部分,完全没意识到后面还有个“往回走”的步骤。咱们先把那个递归函数写出来(应该就是这种结构对吧?):

def print_1_to_10(n):
    if n == 1:
        print(1)
    else:
        print_1_to_10(n - 1)  # 先调用自身处理更小的数
        print(n)              # 等上面的调用做完了再打印当前数

接下来咱们一步一步拆解调用print_1_to_10(10)的全过程:

第一步:递推阶段——一路“钻”到终止条件

当你调用print_1_to_10(10)的时候,因为10不等于1,所以它会先执行print_1_to_10(9),这时候**print(10)的代码根本还没运行**——它得等着前面的递归调用彻底做完才能轮到自己。

同样的,print_1_to_10(9)会调用print_1_to_10(8),print_1_to_10(8)调用print_1_to_10(7)……就这么一直“递推”下去,直到调用print_1_to_10(1)。

到了print_1_to_10(1),满足n == 1的条件,直接打印出1,这个函数调用就彻底结束了。

第二步:回溯阶段——从终止条件往回“补”打印

现在重点来了!当print_1_to_10(1)结束后,程序会回到刚才调用它的那个函数——也就是print_1_to_10(2)。之前print_1_to_10(2)只执行了print_1_to_10(1)这一步,现在这步做完了,就轮到执行后面的print(2)了,于是屏幕上就出现了2,然后print_1_to_10(2)也结束了。

接着程序回到print_1_to_10(3),它的递归调用(print_1_to_10(2))已经完成,现在执行print(3),打印出3……就这么一层一层往回“回溯”,每回到一层,就执行那层剩下的print(n)代码,直到回到最开始的print_1_to_10(10),执行print(10),整个流程就结束了。

简单说,递归其实分两个阶段:

  • 递推:不断拆解问题,直到触达终止条件(你理解的那部分)
  • 回溯:从终止条件开始,回到每一层未完成的函数调用,执行剩下的逻辑(你没明白的那部分)

就像你把一堆套娃从最大的10号开始拆,拆到最小的1号,然后再从1号开始一个个装回去,每装一个就把它的数字喊出来,最后就从1喊到10啦!

内容的提问来源于stack exchange,提问作者Kasper Fischer-Rasmussen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:19:03