Rekursion
Rekursion ist eine Programmiertechnik, bei der eine Funktion sich selbst aufruft, um ein Problem in kleinere Teile zu zerlegen. Sie ist besonders nützlich bei Problemen mit wiederkehrender Struktur oder natürlichen Teilproblemen.
Die Schlüsselelemente der Rekursion sind:
Abbruchbedingung (Base Case): die Bedingung, die die Rekursion beendet;
Rekursiver Fall (Recursive Case): 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 bearbeiten. Sie wird häufig bei Aufgaben wie der Verarbeitung von Bäumen, der Pfadsuche oder dem Zerlegen von Strukturen (z. B. Listen, Zeichenketten) eingesetzt.
def 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)
Gehen wir Schritt für Schritt durch, wie dieses rekursive Programm funktioniert:
Bedingungsprüfung: Wenn
times > 0
, wird die Funktion ausgeführt. In diesem Fall isttimes = 3
, daher ist die Bedingung erfüllt;Nachricht ausgeben: Die Funktion gibt
"Hello, Recursion!"
aus;Rekursiver Aufruf: Die Funktion ruft sich selbst mit
times - 1
auf;Wiederholung: Dieser Vorgang wird fortgesetzt, bis
times
gleich 0 ist;Beendigung: Wenn die Bedingung
times > 0
nicht mehr erfüllt ist, endet die Rekursion und das Programm wird abgeschlossen.
Ergebnis: Die Nachricht "Hello, Recursion!"
wird dreimal ausgegeben.
Ablauf verstehen:
Jedes Mal, wenn die Funktion sich selbst aufruft, wird ein neuer Frame zum Call Stack (einer Speicherstruktur, die aktive Funktionsaufrufe verwaltet) hinzugefügt. Die Funktion ruft sich mit einem kleineren Wert für times
erneut auf. Sobald der Basisfall (times == 0
) erreicht ist, stoppt sie. Danach wird jeder vorherige Aufruf nacheinander in umgekehrter Reihenfolge abgeschlossen. Dieses Rückverfolgungsverhalten 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
number
leer ist, eine leere Zeichenkette zurückgeben. - Überprüfen, ob das erste Zeichen des Strings
number
eine 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_number
verketten, wobei die Teilzeichenkette ab dem zweiten Zeichen übergeben wird. - Falls es keine Ziffer ist, einen rekursiven Aufruf von
format_phone_number
durchführen und dabei das erste Zeichen überspringen.
Lösung
Danke für Ihr Feedback!