我在这里做了第一次递归练习: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。接下来,函数返回。
