Skip to main content
 首页 » 编程设计

python之这个嵌套递归怎么理解呢

2025年05月04日14bonelee

这段代码让我迷路了。运行时,它会输出我觉得很奇怪的序列:

def print_n(number): 
    if (number <= 0): 
         return None 
    else: 
         print number 
         print_n(number-1) 
    print_n(number-1) 
 
print_n(4) 

我以为它会输出这个序列:

4,3,2,1,1,2,1,3,2,1

然而它实际输出:

4,3,2,1,1,2,1,1,3,2,1,1,2,1,1

我试图绘制此函数的堆栈图,但当我第二次出现 print_n(number-1) 时迷路了。

我可以在没有 print_n(number-1) 第二次出现的情况下理解这个程序,因为它只是正常的递归。然而,第二个 print_n(number-1) 似乎比我预期的要复杂得多,我不知道如何跟踪这个函数调用并解释结果...

请您参考如下方法:

由于 if block 具有无条件返回,您可以删除 else 并且程序将继续以相同的方式运行。

def print_n(number): 
    if (number <= 0): 
        return None 
    print number 
    print_n(number-1) 
    print_n(number-1) 

在这里,发生的事情更加明显:您打印数字,然后使用 number-1 调用 print_n 两次。您可以逆向推导输出。

  • print_n(1) 打印“1”
  • print_n(2) 打印“2”加“1”加“1”:“211”
  • print_n(3) 打印“3”加“211”加“211”:“3211211”
  • print_n(4) 打印“4”加“3211211”加“3211211”:“432112113211211”