single
Rekursion
Swipe um das Menü anzuzeigen
Eine rekursive Funktion ist eine Funktion, die sich selbst aufruft, um ein Problem zu lösen, indem sie es in kleinere, einfachere Teile zerlegt.
Die Schlüsselelemente der Rekursion sind:
- Basisfall: die Bedingung, die die Rekursion stoppt;
- 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 in kleinere Teilprobleme zerlegen. 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 Erkundung von Pfaden oder dem Zerlegen von Strukturen (z. B. Listen, Zeichenketten) verwendet.
Ein einfaches Beispiel
123456def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case print_message('Hello, Recursion!', 3)
Schrittweise Erklärung des Ablaufs:
times = 3→ Bedingung ist erfüllt, Nachricht wird ausgegeben, Aufruf vonprint_message(message, 2);times = 2→ Bedingung ist erfüllt, Nachricht wird ausgegeben, Aufruf vonprint_message(message, 1);times = 1→ Bedingung ist erfüllt, Nachricht wird ausgegeben, Aufruf vonprint_message(message, 0);times = 0→ Bedingung ist nicht erfüllt, Rekursion endet.
Ergebnis: Die Nachricht wird dreimal ausgegeben.
Der Aufruf-Stack
Jedes Mal, wenn die Funktion sich selbst aufruft, wird ein neuer Frame zum Aufruf-Stack hinzugefügt – eine Speicherstruktur, die aktive Funktionsaufrufe verfolgt. Sobald der Basisfall erreicht ist, wird jeder vorherige Aufruf nacheinander in umgekehrter Reihenfolge abgeschlossen.
Jede rekursive Funktion muss einen Basisfall haben. Ohne diesen ruft die Funktion sich unendlich oft selbst auf und verursacht einen RecursionError.
Wischen, um mit dem Codieren zu beginnen
Implementiere eine rekursive Funktion list_sum, die die Summe aller Elemente in einer Liste berechnet.
- Wenn die Liste
numbersleer ist, gib0zurück — dies ist der Basisfall; - Andernfalls trenne das erste Element vom Rest. Gib das erste Element (
numbers[0]) addiert zum Ergebnis eines erneuten Aufrufs vonlist_sum()mit dem Rest der Liste (numbers[1:]) zurück.
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