首页 > 解决方案 > 意外的递归结果

问题描述

为了尝试理解 Turtle Tree 代码,我编写了以下代码,但这让我感到困惑。我本来希望程序在 n=6 时停止在第 2 行。n 是如何减少的?

def num(n):
  if n < 6:
  print(n)
  num(n+2)
  print('n here is ', n)
x = 1
num(x)

结果:

1
3
5
n here is 5
n here is 3
n here is 1

标签: pythonrecursion

解决方案


您的问题是您使用的是递归序列。你的 n 不再减少。当 n 仍然具有该值时,打印语句将紧随其后。

以下是序列的示意图说明:

begin num(1)
    - print(n) # n = 1
    begin num(3)
        - print(n) # n = 3
        begin num(5)
            - print(n) # n = 5
            begin num(7)
                - ---
            end num(7)
            - print('n here is ', n) # n = 5
        end num(5)
        - print('n here is ', n) # n = 3
    end num(3)
    - print('n here is ', n) # n = 1
end num(1)

这里的打印调用顺序在逻辑上是从上到下。您可以看到方案中的最后一个 print 语句仍然属于第一个函数调用,其中 n = 1。


推荐阅读