¡Contando la recursión en un progtwig de python!

Necesito contar el número de veces de recursión en un progtwig de python. Así que básicamente necesito un tipo de cosa de variable estática (como en C) que puede contar el número de veces que se llama a la función.

Solo pasa un contador con la recursion

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

O estoy seguro de que hay un decorador elegante, voy a investigar eso ahora …

Otro método utilizando 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 >>> 

Puede definir una clase de contador con la que puede ajustar cualquier función:

 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 

La ventaja aquí es que puede usarlo para cualquier función, sin tener que modificar su firma.

EDITAR : Gracias a @Tom Zych por detectar un error. El nombre de recur debe estar enmascarado por la instancia de clase invocable para que esto funcione. Más información sobre decoradores aquí:

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

Una forma sería usar una list contenga un elemento que mantenga un conteo de cuántas veces se ingresó la función.

 >>> 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 
 >>> def func(n, count=0): ... if n==0: ... return count ... else: ... return func(n-1, count+1) ... >>> func(100) 100