Zählen der Rekursion in einem Python-Programm!

Ich muss die Anzahl der Rekursionen in einem Python-Programm zählen. Also grundsätzlich brauche ich eine statische Variable Art von Ding (wie in C), die die Anzahl der Male zählen kann, die die Funktion aufgerufen wird.

5 Solutions collect form web for “Zählen der Rekursion in einem Python-Programm!”

Füllen Sie einfach einen Zähler mit der Rekursion

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

Oder ich bin sicher, dass es einen fantastischen Dekorateur gibt. Im gonna untersuchen das jetzt …

Sie können eine Counter-aufrufbare Klasse definieren, mit der Sie jede Funktion umschließen können:

 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 

Der Vorteil hier ist, dass man es für jede Funktion verwenden kann, ohne dass es seine Signatur ändern muss.

EDIT : Danke an @Tom Zych, um einen Bug zu entdecken. Der recur muss von der aufrufbaren Klasseninstanz maskiert werden, damit dies funktioniert. Mehr Infos zu Dekorateuren hier:

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

Ein Weg wäre, eine list mit einem Element zu verwenden, das eine Zählung von wie oft die Funktion eingegeben hat.

 >>> 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 

Eine andere Methode mit 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 >>> 
 >>> def func(n, count=0): ... if n==0: ... return count ... else: ... return func(n-1, count+1) ... >>> func(100) 100 
  • Python-Klasse statische Methoden
  • Django: Befehl ausführen collectstatic erhöhen UnicodeDecodeError
  • Fehler beim Anzeigen des statischen Inhalts
  • Python ist die beste Programmiersprache der Welt.