跟踪递归函数中print()的执行次数

时间:2018-10-17 18:55:37

标签: python recursion

我正在研究这个简单的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

2 个答案:

答案 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(),但没有捕获返回值。