English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Artikel werden Sie lernen, wie man rekursive Funktionen (Funktionen, die sich selbst aufrufen) erstellt.
Rekursion ist der Prozess der Definition von bestimmten Inhalten basierend auf sich selbst.
Ein Beispiel aus der physischen Welt ist das Platzieren von zwei parallelen Spiegeln, die sich gegenüberstehen. Jedes Objekt zwischen ihnen wird rekursiv reflektiert.
In Python wissen wir, dass einFunktionEine Funktion kann andere Funktionen aufrufen. Eine Funktion kann sich selbst aufrufen. Diese Arten von Konstruktionen werden rekursive Funktionen genannt.
Hier ist ein Beispiel für eine rekursive Funktion zur Suche nach dem Faktoriel einer Ganzzahl.
Der Faktoriel einer Zahl ist das Produkt aller ganzen Zahlen von16,6!)ist1 * 2 * 3 * 4 * 5 * 6 = 720。
def calc_factorial(x): """Das ist eine Rekursive Funktion zur Berechnung des Ganzzahlfaktoriels""" if x == 1: return 1 else: return (x * calc_factorial(x-1)) num = 4 print("Der Faktoriel von", num, "ist", calc_factorial(num))
在上面的示例中,它calc_factorial()是一个递归函数,它调用了自己。
Im obigen Beispiel ist calc_factorial() eine rekursive Funktion, die sich selbst aufruft.
wenn wir die Funktion mit einem positiven Integer aufrufen, ruft sie sich selbst rekursiv auf, indem sie die Anzahl verringert.1Jede Funktion multipliziert die Zahl mit der Fakultät der Zahl darunter, bis sie
rd Aufruf mit4. Diese Rekursionsaufrufe können in folgenden Schritten erläutert werden. 1) # 4 4 * rd Aufruf mit3st Aufruf mit 2) # 3 4 * 3 * rd Aufruf mit2nd Aufruf mit 3) # 2 4 * 3 * 2 * rd Aufruf mit1calc_factorial( 4) # 1 4 * 3 * 2 * 1 nd Aufruf 4te Aufruf mit1 4 * 3 * 2 nd Aufruf 3te Aufruf als Zahl= 4 * 6 nd Aufruf 2rd Aufruf 24 nd Aufruf 1# zurückgeben
st Aufruf1wenn die Zahl auf
Jede rekursive Funktion muss eine Grundbedingung für das Beenden der Rekursion haben, sonst wird die Funktion sich selbst unendlich oft aufrufen.
Der Python-Interpreter begrenzt die Rekursionstiefe, um unendliche Rekursionen zu vermeiden, die zu einem Stack Overflow führen können.
Standardmäßig ist die maximale Rekursionstiefe 1000. Wenn das Limit überschritten wird, ist das Ergebnis ein RecursionError. Lassen Sie uns einen solchen Fall betrachten.
def recursor(): recursor() recursor()
Ausgabefolge
Rückverfolgung (letzter Aufruf am Ende): Datei "<string>", Zeile 3, in <modul> Datei "<string>", Zeile 2, in einem Datei "<string>", Zeile 2, in einem Datei "<string>", Zeile 2, in einem [Vorherige Zeile wiederholt 996 mehrmalig] RecursionError: maximale Rekursionstiefe überschritten
Rekursionsfunktionen machen den Code sauber und ordentlich.
Durch Rekursion können komplexe Aufgaben in einfachere Unterprobleme zerlegt werden.
Es ist einfacher, Sequenzen zu erzeugen, indem man sich auf Rekursion verlässt, als durch verschachtelte Verschachtelungen.
Manchmal ist es schwer, die Logik hinter der Rekursion zu verfolgen.
Rekursionen sind teuer (wenig effizient), da sie viel Speicher und Zeit in Anspruch nehmen.
Rekursionsfunktionen sind schwer zu debuggen.