如何计算递归函数的重复?

时间:2016-11-18 17:54:09

标签: python

所以我有这个功能(例子):

def monty(x):
  if abs(int(x)) == 1:
    print("Cool!")
    print("Took %s attempts.") % (z)
  elif abs(int(x)) == 0:
    print("Nope.")
  else:
    z = z + 1
    y = x - 1
    monty(y)

现在,当然,'z'尚未定义,因此当运行此函数以便调用'else'语句时,程序将返回NameError异常。

好吧,好吧。让我们试着说出这个陈述:

else:
  try: z
  except NameError: z = 0
  else: z = z + 1
  y = x - 1
  monty(y)

还假设我们在'if'语句中添加了相同的NameError catch。

该语句始终将'z'返回为0,因为当再次运行'monty'时,该变量完全被遗忘。好的,如果我们首先尝试在'monty'之外定义z,并删除NameError catch?

好吧,它再次返回一个NameError,如果我们保留NameError catch,它仍然只输出0。

那么,如何在每次有效调用函数时使函数增加?换句话说,如何让程序静默计算函数的运行次数,稍后会被召回?为了方便用户,我们尝试避免在函数中添加另一个参数

1 个答案:

答案 0 :(得分:3)

只需将z添加为关键字参数

def monty(x, _z=0):
    # ...
    else:
        _z = _z + 1
        y = x - 1
        monty(y, _z)

我将z重命名为_z,表示这是最终用户无需担心的实施细节。由于关键字参数具有默认值,因此monty()的来电者不必担心它。