[英]sequence/stack diagam for recursive function
对于以下代码:
def printList(L):
if L:
print L[0]
printList(L[1:])
我可以有这样的序列图:
# NON PYTHON PSEUDO CODE
PrintList([1,2,3])
prints [1,2,3][0] => 1
runs printList([1,2,3][1:]) => printList([2,3])
=> we're now in printList([2,3])
prints [2,3][0] => 2
runs printList([2,3][1:]) => printList([3])
=> we are now in printList([3])
prints [3][0] => 3
runs printList([3][1:]) => printList([])
=> we are now in printList([])
"if L" is false for an empty list, so we return None
=> we are back in printList([3])
it reaches the end of the function and returns None
=> we are back in printList([2,3])
it reaches the end of the function and returns None
=> we are back in printList([1,2,3])
it reaches the end of the function and returns None
所以我的问题是是否将代码更改为:
def printList(L):
if L:
print L[0]
printList(L[1:])
print L[0]
序列图将如何变化,我想了解在执行此代码期间究竟发生了什么。
在递归调用之后调用的print语句将全部在“备份途中”命中。 也就是说,您的每个语句:“到达函数末尾并返回None”都可以更改为“它输出L [0]的当前值,到达函数末尾并返回None”,这将分别为3、2和1。
像这样:
PrintList([1,2,3])
prints [1,2,3][0] => 1
runs printList([1,2,3][1:]) => printList([2,3])
=> we're now in printList([2,3])
prints [2,3][0] => 2
runs printList([2,3][1:]) => printList([3])
=> we are now in printList([3])
prints [3][0] => 3
runs printList([3][1:]) => printList([])
=> we are now in printList([])
"if L" is false for an empty list, so we return None
=> we are back in printList([3])
prints [3][0] => 3
it reaches the end of the function and returns None
=> we are back in printList([2,3])
prints [2,3][0] => 2
it reaches the end of the function and returns None
=> we are back in printList([1,2,3])
prints [1,2,3][0] => 1
it reaches the end of the function and returns None
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.