Rekursion
Rekursion ist eine Programmiertechnik, bei der sich eine Funktion selbst aufruft, um ein Problem in kleinere Teile zu zerlegen. Sie ist besonders nützlich für Probleme mit wiederkehrender Struktur oder natürlichen Teilproblemen.
Die Schlüsselelemente der Rekursion sind:
- Abbruchbedingung: die Bedingung, die die Rekursion beendet;
- Rekursiver Fall: der Teil, in dem die Funktion sich selbst mit einer einfacheren Eingabe aufruft.
Warum Rekursion verwenden?
Einige Probleme lassen sich auf natürliche Weise durch kleinere Teilprobleme ausdrücken. Rekursion bietet eine übersichtliche und elegante Möglichkeit, diese zu lösen, indem eine Funktion sich selbst aufruft, um die einfacheren Fälle zu behandeln. Sie wird häufig bei Aufgaben wie der Verarbeitung von Bäumen, der Pfadsuche oder dem Zerlegen von Strukturen (z. B. Listen, Zeichenketten) eingesetzt.
1234567def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case # Function call print_message("Hello, Recursion!", 3)
Schrittweise Analyse zur Verdeutlichung der Funktionsweise dieses rekursiven Programms:
- Bedingungsprüfung: Wenn
times > 0, wird die Funktion ausgeführt. In diesem Fall isttimes = 3, daher ist die Bedingung erfüllt; - Ausgabe der Nachricht: Die Funktion gibt
"Hello, Recursion!"aus; - Rekursiver Aufruf: Die Funktion ruft sich selbst mit
times - 1auf; - Wiederholung: Dieser Vorgang wird fortgesetzt, bis
timesden Wert 0 erreicht; - Beendigung: Sobald die Bedingung
times > 0nicht mehr erfüllt ist, endet die Rekursion und das Programm wird abgeschlossen.
Ergebnis: Die Nachricht "Hello, Recursion!" wird dreimal ausgegeben.
Ablaufverständnis:
Bei jedem Selbstaufruf der Funktion wird ein neuer Frame zum Call Stack (Speicherstruktur zur Verwaltung aktiver Funktionsaufrufe) hinzugefügt. Die Funktion ruft sich mit einem jeweils kleineren Wert für times erneut auf. Sobald der Basisfall (times == 0) erreicht ist, stoppt die Ausführung. Anschließend werden alle vorherigen Aufrufe nacheinander in umgekehrter Reihenfolge abgeschlossen. Dieses Backtracking-Verhalten ist grundlegend für die Funktionsweise von Rekursion.
Swipe to start coding
Gegeben ist ein String, der eine Telefonnummer darstellt und Leerzeichen, Bindestriche, Klammern oder andere nicht-numerische Zeichen enthalten kann. Ziel ist es, nur die Ziffern mithilfe von Rekursion zu extrahieren.
- Wenn der Eingabestring
numberleer ist, eine leere Zeichenkette zurückgeben. - Überprüfen, ob das erste Zeichen des Strings
numbereine Ziffer ist, indem die Methodeisdigit()in einerif-Bedingung verwendet wird. - Falls es sich um eine Ziffer handelt, diese mit dem Ergebnis eines rekursiven Aufrufs von
format_phone_numberverketten, wobei die Teilzeichenkette ab dem zweiten Zeichen übergeben wird. - Falls es keine Ziffer ist, einen rekursiven Aufruf von
format_phone_numberdurchführen, wobei das erste Zeichen übersprungen wird.
Lösung
Danke für Ihr Feedback!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Can you explain what happens if there is no base case in a recursive function?
Can you show another example of recursion with a different problem?
What are some common mistakes to avoid when using recursion?
Awesome!
Completion rate improved to 4.17
Rekursion
Swipe um das Menü anzuzeigen
Rekursion ist eine Programmiertechnik, bei der sich eine Funktion selbst aufruft, um ein Problem in kleinere Teile zu zerlegen. Sie ist besonders nützlich für Probleme mit wiederkehrender Struktur oder natürlichen Teilproblemen.
Die Schlüsselelemente der Rekursion sind:
- Abbruchbedingung: die Bedingung, die die Rekursion beendet;
- Rekursiver Fall: der Teil, in dem die Funktion sich selbst mit einer einfacheren Eingabe aufruft.
Warum Rekursion verwenden?
Einige Probleme lassen sich auf natürliche Weise durch kleinere Teilprobleme ausdrücken. Rekursion bietet eine übersichtliche und elegante Möglichkeit, diese zu lösen, indem eine Funktion sich selbst aufruft, um die einfacheren Fälle zu behandeln. Sie wird häufig bei Aufgaben wie der Verarbeitung von Bäumen, der Pfadsuche oder dem Zerlegen von Strukturen (z. B. Listen, Zeichenketten) eingesetzt.
1234567def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case # Function call print_message("Hello, Recursion!", 3)
Schrittweise Analyse zur Verdeutlichung der Funktionsweise dieses rekursiven Programms:
- Bedingungsprüfung: Wenn
times > 0, wird die Funktion ausgeführt. In diesem Fall isttimes = 3, daher ist die Bedingung erfüllt; - Ausgabe der Nachricht: Die Funktion gibt
"Hello, Recursion!"aus; - Rekursiver Aufruf: Die Funktion ruft sich selbst mit
times - 1auf; - Wiederholung: Dieser Vorgang wird fortgesetzt, bis
timesden Wert 0 erreicht; - Beendigung: Sobald die Bedingung
times > 0nicht mehr erfüllt ist, endet die Rekursion und das Programm wird abgeschlossen.
Ergebnis: Die Nachricht "Hello, Recursion!" wird dreimal ausgegeben.
Ablaufverständnis:
Bei jedem Selbstaufruf der Funktion wird ein neuer Frame zum Call Stack (Speicherstruktur zur Verwaltung aktiver Funktionsaufrufe) hinzugefügt. Die Funktion ruft sich mit einem jeweils kleineren Wert für times erneut auf. Sobald der Basisfall (times == 0) erreicht ist, stoppt die Ausführung. Anschließend werden alle vorherigen Aufrufe nacheinander in umgekehrter Reihenfolge abgeschlossen. Dieses Backtracking-Verhalten ist grundlegend für die Funktionsweise von Rekursion.
Swipe to start coding
Gegeben ist ein String, der eine Telefonnummer darstellt und Leerzeichen, Bindestriche, Klammern oder andere nicht-numerische Zeichen enthalten kann. Ziel ist es, nur die Ziffern mithilfe von Rekursion zu extrahieren.
- Wenn der Eingabestring
numberleer ist, eine leere Zeichenkette zurückgeben. - Überprüfen, ob das erste Zeichen des Strings
numbereine Ziffer ist, indem die Methodeisdigit()in einerif-Bedingung verwendet wird. - Falls es sich um eine Ziffer handelt, diese mit dem Ergebnis eines rekursiven Aufrufs von
format_phone_numberverketten, wobei die Teilzeichenkette ab dem zweiten Zeichen übergeben wird. - Falls es keine Ziffer ist, einen rekursiven Aufruf von
format_phone_numberdurchführen, wobei das erste Zeichen übersprungen wird.
Lösung
Danke für Ihr Feedback!
single