为什么这个递归函数不能完成两次打印?

jc7*_*c72 2 python recursion

我仍然试图理解递归和我期望打印的代码和实际打印的内容是不同的.

所以这里的代码基于我在youtube上找到的一个简单例子,

def count(n):
    if n > 0:
        print "Count 1", ", ", n

        count(n - 1)

        print "Count 2", ", ", n
    else:
        print "Done"

count(1)
Run Code Online (Sandbox Code Playgroud)

这就是它的印刷品,

数1,1

完成

数量2,1

我的期望是什么

数1,1

完成

完成

我的理解(当然是错误的)是count(1)(对于外部计数函数)将被调用,因为1大于0将打印1,然后count(1 - 1)(内部计数函数)将调用count(0)(外部计数功能),因为0不大于1,这将打印完成.然后我认为从count(1 - 1)返回(内部计数函数)也将返回Done,因为没有其他n值输入到内部count()中.我不知道怎么做一次打印,1次打印两次???

ars*_*jii 6

让我们手动完成这个功能,输入1:

  • count(1)叫(n是1):
    • n > 0是真实的,所以(如果条款):
      • 打印Count 1 , 1(因为n在1这里)
      • count(0)叫(n是0):
        • n > 0是假的,所以(else子句):
          • 打印 Done
      • 打印Count 2 , 1(因为n在1这里)

如您所见,done仅打印一次.当你面对这种困境时,通常会非常有助于拿出铅笔和记事本并准确地找出手头发生的事情.

您还可以通过删除前两个打印语句来考虑函数的简化版本,因为它们不应影响"Done"打印的次数:

def count(n):
    if n > 0:
        count(n - 1)
    else:
        print "Done"
Run Code Online (Sandbox Code Playgroud)

现在应该更清楚一点,"Done"只打印一次:

  • count(1)叫(n是1):
    • n > 0是真实的,所以(如果条款):
      • count(0)叫(n是0):
        • n > 0是假的,所以(else子句):
          • 打印 Done