这个是个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)
这个是个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行往后的输出都看不懂了。。。
因为 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 以后再返回。
多谢指点!
包子送上
【 在 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 以后再返回。