这段代码让我迷路了。运行时,它会输出我觉得很奇怪的序列:
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”
