Python 如何理解这种嵌套递归?
这个密码把我弄丢了。运行时,它会输出我觉得奇怪的序列:Python 如何理解这种嵌套递归?,python,recursion,Python,Recursion,这个密码把我弄丢了。运行时,它会输出我觉得奇怪的序列: 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
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,1,2,1,1
我试图绘制这个函数的堆栈图,但是当我在第二次出现print\u nnumber-1时迷路了
我不需要第二次出现print_nnumber-1就可以理解这个程序,因为它只是普通的递归。但是,第二个print编号1似乎比我预期的要复杂得多,我不知道如何跟踪此函数调用并解释结果…由于if块具有无条件返回,您可以删除else,程序将继续以相同的方式运行
def print_n(number):
if (number <= 0):
return None
print number
print_n(number-1)
print_n(number-1)
在这里,更明显的是发生了什么:您打印号码,然后使用数字1调用print\n两次。您可以向后推导出输出
打印1打印1
打印\u n2打印2加1加1:211
打印\u n3打印3加211加211:3211211
打印4加3211211加3211211:432112113211211
由于if块具有无条件返回,因此可以删除else,程序将继续以相同的方式运行
def print_n(number):
if (number <= 0):
return None
print number
print_n(number-1)
print_n(number-1)
在这里,更明显的是发生了什么:您打印号码,然后使用数字1调用print\n两次。您可以向后推导出输出
打印1打印1
打印\u n2打印2加1加1:211
打印\u n3打印3加211加211:3211211
打印4加3211211加3211211:432112113211211
我喜欢Kevin的答案,但让我补充几句来理解递归: 我经常建议使用代表堆栈的纸张。每个工作表都包含其本地变量和当前状态,您可以用笔标记正在处理的行 使用单独的工作表作为输出/控制台 这让你对正在发生的事情有了很好的理解
当然,在调试器中跟踪代码并检查堆栈跟踪也会有所帮助。但是先试试纸上的方法 我喜欢Kevin的答案,但让我补充几句来理解递归: 我经常建议使用代表堆栈的纸张。每个工作表都包含其本地变量和当前状态,您可以用笔标记正在处理的行 使用单独的工作表作为输出/控制台 这让你对正在发生的事情有了很好的理解 当然,在调试器中跟踪代码并检查堆栈跟踪也会有所帮助。但是先试试纸上的方法 你可以看到递归你可以看到递归