计算python程序中的递归!

时间:2011-03-26 08:41:40

标签: python recursion static

我需要计算python程序中递归的次数。所以基本上我需要一个静态变量类的东西(比如在C中),它可以计算调用函数的次数。

5 个答案:

答案 0 :(得分:23)

只需传递带递归的计数器

def recur(n, count=0):
    if n == 0:
        return "Finished count %s" % count
    return recur(n-1, count+1)

或者我确定有一些花哨的装饰,我现在要调查......

答案 1 :(得分:9)

使用global的另一种方法:

>>> def recur(n):
...     global counter
...     counter+=1
...     if n==0:
...         return -1
...     else:
...         return recur(n-1)
... 
>>> counter = 0
>>> recur(100)
-1
>>> print counter
101
>>> 

答案 2 :(得分:5)

您可以定义一个Counter callable类,您可以使用它来包装任何函数:

class Counter(object) :
    def __init__(self, fun) :
        self._fun = fun
        self.counter=0
    def __call__(self,*args, **kwargs) :
        self.counter += 1
        return self._fun(*args, **kwargs)

def recur(n) :
    print 'recur',n
    if n>0 :
        return recur(n-1)
    return 0

recur = Counter(recur)

recur(5)

print '# of times recur has been called =', recur.counter

这里的优点是你可以将它用于任何功能,而不必修改它的签名。

编辑:感谢@Tom Zych发现错误。 recur名称必须由可调用的类实例屏蔽,以使其工作。有关装饰器的更多信息:

http://wiki.python.org/moin/PythonDecoratorLibrary#Counting_function_calls

答案 3 :(得分:4)

一种方法是使用包含一个元素的list,该元素保留函数输入次数的计数。

>>> counter=[0]
>>> def recur(n):
...     counter[0]+=1
...     if n==0:
...             return -1
...     else:
...             return recur(n-1)
... 
>>> recur(100)
-1
>>> print counter[0]
101

答案 4 :(得分:1)

>>> def func(n, count=0):
...     if n==0:
...             return count
...     else:
...             return func(n-1, count+1)
... 
>>> func(100)
100