Heim >Backend-Entwicklung >Python-Tutorial >Ist der rekursive Python-Algorithmus schwierig? Detaillierte Beispiele für rekursive Python-Funktionen

Ist der rekursive Python-Algorithmus schwierig? Detaillierte Beispiele für rekursive Python-Funktionen

Tomorin
TomorinOriginal
2018-08-17 17:53:322483Durchsuche

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)
Das Obige ist eine rekursive Funktion. Sie können Folgendes versuchen:

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn