Rekursive Funktionen in Python

In diesem Tutorial werden wir die Rekursion mit Beispielen in Python. Rekursion in der Programmierung ist eine sehr mächtige Technik, sie wird mit Funktionen durchgeführt, die sich selbst aufrufen, sehen Sie es als eine Art Schleife, da der gleiche Code mehrmals wiederholt wird, bis die Lösung erreicht ist.

Eigenschaften, die eine rekursive Funktion haben mussBasisfallEs ermöglicht uns, die Funktion an einem bestimmten Punkt zu beenden und dass keine unendlichen Aufrufe auftreten.
Rekursiver FallIn diesem Fall rufen wir die Funktion erneut auf, kommen aber der Lösung näher. In den Beispielen sieht es besser aus.

NotizEs ist wichtig, sich über den Basisfall im Klaren zu sein und zu wissen, dass der rekursive Fall sich ihm nähert und nicht in einen Zustand unendlicher Aufrufe übergeht. Dies ist ein häufiger Fehler beim Starten mit Rekursion.

Kommen wir zu den Beispielen, die einfach und kurz sein werden, damit sie gut aufgenommen werden können.

Beispiel 1 - Fakultät


In diesem Beispiel werden wir löse die Fakultät einer ZahlWenn Sie wissen möchten, worum es bei der Fakultät geht, besuchen Sie diesen Link. Hier ist der Code, und unten erkläre ich die rekursive Funktion.
 def Fakultät (Zahl): if (Zahl == 0 oder Zahl == 1): Rückgabe 1 else: Zahl zurück * Fakultät (Zahl-1) if __name__ == "__main__": try: Zahl = int (Eingabe ("From Von welcher Zahl möchten Sie die Fakultät wissen? ")) if (num <0): print (" Die Zahl muss größer oder gleich 0 sein ") else: print (" Die Fakultät von ", num," is ", Fakultät (num )) außer: print ("Eine Zahl wird erwartet") 
Unsere rekursive Funktion hat den Basisfall im if und den rekursiven im else. Sie können sehen, dass der Basisfall eine 1 zurückgibt und dass diese erreicht ist, wenn der an die Funktion übergebene Parameter 0 oder 1 ist, wenn dieser Fall erreicht ist, ruft die Funktion nicht erneut auf. Im rekursiven Fall haben wir einen Aufruf der Funktion an sich selbst, aber wie können Sie den Parameter um 1 reduzieren (wir kommen dem Basisfall näher). Der letzte Teil des Codes außerhalb der Funktion ist nur dafür verantwortlich, den Benutzer nach einer Zahl zu fragen und zu überprüfen, ob diese größer oder gleich 0 ist, um die Funktion aufzurufen, da die Fakultät mit negativen Zahlen nicht funktioniert.

Wenn wir die Funktion mit der Nummer 4, also Fakultät (4) aufrufen, haben wir folgende Aufrufe:

 Ruf 1: Fakultät (4) Ruf 2: 4 * Fakultät (3) Ruf 3: 3 * Fakultät (2) Ruf 4: 2 * Fakultät (1)
Wenn Factorial mit 1 aufgerufen wird, gibt es keine Aufrufe mehr und es wird 1 zurückgegeben, dann gibt diese Funktion die Ergebnisse an die Funktion zurück, die ich aufrufe, die Rückgabe wäre wie folgt:
 Fakultät (1) = 1 Fakultät (2) = 2 * 1 Fakultät (3) = 3 * 2 Fakultät (4) = 4 * 6
Und wir haben bereits unser Ergebnis, das 24 ist, aus der Multiplikation der Zahlen: 1 * 2 * 3 * 4. Als nächstes hinterlasse ich einen Screenshot, wenn ich nach der Fakultät von 5 frage, was nichts anderes ist, als 5 mit der Fakultät von 4 zu multiplizieren (von der wir bereits wissen, dass sie 24 ist), was als Ergebnis 120 ergibt. Das sieht man auch, wenn der Benutzer die Zahl einfügt falsch, es ist:

Beispiel 2 - Addition Subtraktion


In diesem Beispiel habe ich eine rekursive Funktion eingefügt, um eine Addition oder Subtraktion vorzunehmen, natürlich kommt dieses Beispiel im wirklichen Leben normalerweise nicht vor, aber als Beispiel funktioniert es:
 def Operate (Zahl1, Zahl2): if (Zahl2 == 0): Rückgabe Zahl1 elif (Zahl2 <0): Rückgabe Rückgabe (Zahl1-1, Zahl2 + 1) else: Rückgabe Rückgabe (Zahl1 + 1, Zahl2-1) if __name__ == "__main__": print ("Hinzufügen von 10 und 3:", Bedienen (10, 3)) Drucken ("Hinzufügen von 5 und -2:", Bedienen (5, -2)) 
Hier haben wir einen Basisfall und 2 rekursive Fälle, um zu wissen, welcher Weg zu berühren ist, da wir je nachdem, ob die Zahl positiv oder negativ ist, anders vorgehen müssen. Die Operate-Funktion empfängt 2 Zahlen, und der Algorithmus kümmert sich darum, eins zu Zahl2 zu subtrahieren oder zu addieren und an Zahl1 weiterzugeben (Wenn Zahl2 positiv ist, subtrahiere ich 1 von Zahl2 und addiere sie zu Zahl1), also bis die Variable Zahl2 gleich ist auf 0.

Zum Beispiel werden wir 3 + 2 hinzufügen, um die Anrufe zu sehen.

 Ruf 1: Bedienen (3,2) Ruf 2: Bedienen (4,1) Ruf 3: Bedienen (5,0)
In diesem Fall, wenn wir (5,0) operieren, gibt es nichts anderes zu tun, wir haben das Ergebnis direkt (im Gegensatz zu der Fakultät, die die Multiplikation durchführen musste). Hier ist das Ergebnis der Ausführung des Codes:

NotizObwohl wir mit Rekursion eine elegante Lösung haben und normalerweise kürzer verwendet werden sollte, wenn wir keine andere Möglichkeit haben, ist es die bessere Wahl, wenn wir an seiner iterativen Variante ziehen können, da es weniger Speicher verbraucht und normalerweise schneller ist.

Hat dir dieses Tutorial gefallen und geholfen?Sie können den Autor belohnen, indem Sie diesen Knopf drücken, um ihm einen positiven Punkt zu geben
wave wave wave wave wave