Python:递归

Yel*_*low 0 python recursion

def counter(n):
  if n < 0:
      return
  else:
      print '1st print', n
      counter(n-1)
      print '2nd print', n

print counter(3)

# 1st print 3
# 1st print 2
# 1st print 1
# 1st print 0
# 2nd print 0
# 2nd print 1
# 2nd print 2
# 2nd print 3
# None
Run Code Online (Sandbox Code Playgroud)

所以在摆弄了递归函数后,我意识到一些非常特殊的东西,我无法完全绕过它.我理解它从3到0打印的函数的第一部分,但是当它从0再次打印到3时我不理解第二部分.当n = 0时,该函数不会停止吗?

Mar*_*ers 8

您的递归调用仍会返回到调用它的父函数.在那个范围 n没有改变.

即使您继续从自身调用函数,函数本地仍然是当前帧的本地.

您的递归调用如下所示:

counter(3):
  n = 3
  |
  | counter(n - 1)
  |   n = 2
  |   |
  |   | counter(n - 1)
  |   |   n = 1
  |   |   |
  |   |   | counter(n - 1)
  |   |   |   n = 0
  |   |   |   |
  |   |   |   return
  |   |   |
  |   |   n is still 1 here
  |   |   return
  |   |
  |   n is still 2 here
  |   return
  |
  n is still 3 here
  return
Run Code Online (Sandbox Code Playgroud)