Innerhalb einer Funktion können andere Funktionen aufgerufen werden. Wenn sich eine Funktion intern selbst aufruft, ist die Funktion eine rekursive Funktion.
Berechnen wir zum Beispiel die Fakultät n! = 1 x 2 x 3 x ... x n, dargestellt durch die Funktion fact(n). ) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)!
Fakt(n) kann also ausgedrückt werden Für n x fact(n-1) erfordert nur n=1 eine besondere Behandlung.
Fakt(n) wird also
rekursiv geschrieben: def fact(n):
if n==1:
return 1
return n * fact(n - 1)
>>> fact(1) 1 >>> fact(5) 120 >>> fact(100) 933262154439441526816992388562667004907159682643816214685 92963895217599993229915608941463976156518286253697920827223 758251185210916864000000000000000000000000
Wenn wir Fakt(5) berechnen, können wir den Berechnungsprozess gemäß der Funktionsdefinition wie folgt sehen:
===> Fakt(5)
=== > 5 * fact(4)===> 5 * (4 * fact(3))
===> ))
===> 5 * (4 * (3 * (2 * fact(1))))
===> )
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
= ==> 120
Die Vorteile rekursiver Funktionen sind einfache Definition und klare Logik. Theoretisch können alle rekursiven Funktionen in einer Schleife geschrieben werden, aber die Logik von Schleifen ist nicht so klar wie die von Rekursionen.
Achten Sie darauf, einen Stapelüberlauf zu verhindern, wenn Sie rekursive Funktionen verwenden. In Computern werden Funktionsaufrufe über die Datenstruktur des Stapels implementiert. Immer wenn ein Funktionsaufruf eingegeben wird, wird dem Stapel ein Stapelrahmen hinzugefügt. Da die Größe des Stapels nicht unendlich ist, führen zu viele rekursive Aufrufe zu einem Stapelüberlauf. Sie können fact(1000) ausprobieren:
>>> fact(1000) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in fact ... File "<stdin>", line 4, in fact RuntimeError: maximum recursion depth exceeded in comparison
Das obige ist der detaillierte Inhalt vonIst der rekursive Python-Algorithmus schwierig? Detaillierte Beispiele für rekursive Python-Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!