我正在研究这个简单的python程序:
MyCoolData
如您所见,我试图查找执行第3行的次数,但是由于递归不断重新启动函数调用,所以我总是得到“ Printed 1”。我以为我占了这个,但是显然我遗漏了一些东西。
我还可以采用什么其他方法来跟踪执行print(x)的总次数?
例如,输入2应该输出:
2
1
0
1
0
打印5
输入3应该输出:
3
2
1
0
1
0
2
1
0
1
0
2
1
0
1
0
打印16
答案 0 :(得分:1)
问题在于,行func(x-1, printed)
仅丢弃其结果。尽管它递增printed
,但这仅在函数内部局部发生,并且只有其返回值才将结果传达给程序的其余部分。
要修复此问题,只需通过替换函数的自身计数printed = function(x-1, printed)
来更新函数的当前记录。
(另一种选择是将全局变量printed
保留在所有函数之外,并让所有函数使用global
关键字对此进行更新。这样做会更容易,但在避免这种情况方面做得很好它-全局变量是邪恶的,在任何合理的复杂程序中,它们都会带来比其价值更大的麻烦。)
答案 1 :(得分:0)
def func(x, printed):
i = 0
print(x)
printed += 1
while i < x:
i = i+1
func(x-1, printed)
return printed
您正在内部递归调用func()
,但没有捕获返回值。