首页 > 解决方案 > 带计数器的 Python 递归

问题描述

我有一个这样的递归函数:

b=4
def someFunction(x,y,z):
   global b
   b += x
   if...#something

   else:
       someFunction(x,y,z)
 ...

有很多东西,但这是一般的想法。我的问题是,在 cmd 上运行我的程序时,我无法继续使用不同的参数调用“someFunction”,因为没有为 b 重置,但是如果我在函数中重置 b,它将无法按我的预期工作。因此,我可以在两个函数中使用子函数中的递归来编写它,但是当我调用函数时是否有其他方法可以重置 b 而不会在开始递归时出现问题?

标签: pythonrecursion

解决方案


我通常做的是使用一个可选的关键字参数,像这样。

def someFunction(x,y,z, b=None):
   if b is None:
       b = 4 
   b += x
   if...#something

   else:
       someFunction(x,y,z,b=b)

这样,您可以b在第一次调用任何值时初始化(并避免使用全局变量)。

这也有积极的一面,现在someFunction是一个纯函数(没有副作用,相同的输入总是给出相同的输出)并且更容易使用。(测试,重构,..)


推荐阅读