Skip to main content
 首页 » 编程设计

python之难以理解递归

2025年05月04日13EasonJim

我在这里做了第一次递归练习:http://cscircles.cemc.uwaterloo.ca/16-recursion/

我按照明显的提示做了这个:

def countup(n): 
  if n == 0: 
    print('Blastoff!') 
  else: 
    countup(n - 1) 
    print(n) 

所以代码基本上是从 0(blastoff) 到 n。我只是不明白它是如何工作的——我查看了可视化工具,它经历了 countup(n) 到 countup(0),此时它打印出“Blastoff”,一切正常。在此之后,它有点……停留在 else 循环中并开始打印出之前的 n 个值……为什么要这样做。它是否出于某种原因存储了 n 个值,即使存储了这个代码机制又是如何工作的?任何帮助将不胜感激。非常感谢。

请您参考如下方法:

每次 countup() 调用自身时,它最终都会返回到调用的同一点。下一行将打印 n,因为它是在该函数调用期间。

每次调用函数时,它的所有名称都会重新创建,它们是本地。因此,每次调用 countup() 时,您都有一个本地的、独立的 n 值。

本质上,您创建了一个 countup() 调用链:

  • countup(2):n 是 2,不是 0,所以 else 分支被执行,调用 countup(1)

    • countup(1):n 是 1,不是 0,所以 else 分支被执行,调用 countup(0)

      • countup(0):n为0,打印Blastoff!!,函数返回


      countup(0) 调用返回,下一行打印 n,在此调用中仍然是 1。接下来,函数返回。

    countup(1) 调用返回,下一行打印n,在这个调用中仍然是 2。接下来,函数返回。