谁给看下这个recursive function 到底怎么work的?

s
suixing
楼主 (未名空间)

这个是个dummy Python script (其他语言逻辑也一样)
def printTest(test2, test):
if len(test) > 2 :
print "yes"
#return
else:
for i in range(len(test2)):
print "i = ", i
if test2[i] > 3:
test.append(test2[i])
print test
printTest(test2, test)
print "reach return"
return test

test = []
test2 = [1,2,3,4, 5]
print printTest(test2, test)

输出见附件图片

搞不懂输出的第22行开始是在干什么, 怎么打印了两次“reach return”, 然后又重
复开始打印"i=4", 还往test list里重复加了5, 基本第22行往后的输出都看不懂了。。。

r
repast

因为 len(test) > 2 所以会 print "reach return" 并且 return

return 之后会继续 looping on test2, 进入 recursive call printTest 之前, i = 3, 所以继续 i = 4, 在 test 后面 append 5 之后结束 for loop 并 print "reach return" <- 这就是第二个="" reach="" return="">
因为每次 i = 3 会递归call printTest 直到 test 长长到 [4, 4, 4], 一共三次,所以stack pop 回来也有三次, 每次从 4 后面的 5 开始,append 5 以后再返回。

s
suixing

多谢指点!
包子送上

【 在 repast (xebec) 的大作中提到: 】
: 因为 len(test) > 2 所以会 print "reach return" 并且 return
: return 之后会继续 looping on test2, 进入 recursive call printTest 之前, i =
: 3, 所以继续 i = 4, 在 test 后面 append 5 之后结束 for loop 并 print "
reach
: return" <- 这就是第二个="" reach="" return="">: 因为每次 i = 3 会递归call printTest 直到 test 长长到 [4, 4, 4], 一共三次,所
: 以stack pop 回来也有三次, 每次从 4 后面的 5 开始,append 5 以后再返回。