Rekursive Funktionen Teil 1
Teil des Abschnitts Logik & Ablaufsteuerung der GDScript-Journey von Coddy. Lektion 57 von 78.
Eine rekursive Funktion ist eine Funktion, die sich selbst aufruft. Jeder Aufruf löst eine kleinere Version des Problems, bis das Problem klein genug ist, um es direkt zu beantworten.
Diese Funktion addiert die ganzen Zahlen von 1 bis n:
func sum_to_n(n: int) -> int:
if n == 0: # Basisfall
return 0
return n + sum_to_n(n - 1) # rekursiver SchrittEs besteht aus zwei Teilen:
- Der Basisfall liefert eine Antwort, ohne die Funktion erneut aufzurufen: Die Summe bis
0ist0. - Der rekursive Schritt ruft die Funktion mit einem kleineren Wert,
n - 1, auf und bildet seine Antwort aus dem Ergebnis.
sum_to_n(3) ist 3 + sum_to_n(2), was 3 + 2 + sum_to_n(1) ist, was 3 + 2 + 1 + sum_to_n(0) ist. Der Basisfall gibt 0 zurück, und die wartenden Aufrufe werden nacheinander abgeschlossen: Das Ergebnis ist 6.
Jeder rekursive Schritt muss dem Basisfall näherkommen. Ohne Basisfall oder mit einem Schritt wie n + 1, der ihn nie erreicht, ruft die Funktion sich immer weiter selbst auf. Godot erlaubt etwa 1.000 ineinander verschachtelte Aufrufe und stoppt dann das Programm mit einem Fehler.
Aufgabe
EinfachDas Programm liest eine ganze Zahl n (0 oder größer) und ruft count_down(n) auf.
Schreibe unterhalb von _ready() die rekursive Funktion count_down mit einem Parameter. Sie gibt jede Zahl von ihrem Argument abwärts bis 0 aus, eine pro Zeile. Verwende keine Schleife: Die Funktion gibt ihre Zahl aus und ruft sich selbst mit der nächstkleineren Zahl auf.
Für die Eingabe 3 lautet die Ausgabe:
3
2
1
0Probier es selbst
extends Node
func _ready():
var n := int(OS.read_string_from_stdin())
count_down(n)
# Schreibe unten die rekursive Funktion count_down(n)
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablaufsteuerung
1Strings im Detail
String-MethodenIn Strings suchenErsetzen und TrimmenAufteilen und ZusammenfügenRückblick – Benutzernamen prüfen4Wörterbücher Teil 2
Verschachtelte WörterbücherArrays aus WörterbüchernWörterbücher zusammenführenWörterbücher kopierenWiederholung – Häufigkeitszähler10Fortgeschrittene Funktionen
Mehrere Werte zurückgebenLambda-Funktionen Teil 1Lambda-Funktionen Teil 2Wiederholung – Sortieren mit LambdaRekursive Funktionen Teil 1Rekursive Funktionen Teil 2Wiederholung – Verschachteltes Array summieren13Inventarverwaltungssystem
ProjektübersichtArtikel hinzufügen2Fortgeschrittene Entscheidungsfindung
Match mit VariablenMatch-GuardsArray-MusterDictionary-MusterMitgliedschaftsprüfungenRückblick – Befehlsparser5Kontaktbuch-Anwendung
Menü anzeigenKontakt hinzufügen8Schülerdatenverwaltung
ProjektübersichtSchüler hinzufügen3Mehrdimensionale Arrays
Grundlagen zu 2D-ArraysAuf Elemente in 2D-Arrays zugreifenVerschachtelte Schleifen mit 2D-ArraysWiederholung – 2D-ArraysGezackte ArraysGängige Muster für 2D-ArraysWiederholung – Spielbrett6Mengen mit Dictionaries
Was ist eine Menge?Dictionary als MengeHinzufügen und EntfernenVereinigung und SchnittmengeMengendifferenzWiederholung – Duplikate entfernen9Fortgeschrittene Datenaggregation
Werte summierenMinimum und Maximum findenBenutzerdefiniertes SortierenRückblick – Wörterbuch-Sortierer12Einfache Fehlerbehandlung
Was ist Fehlerbehandlung?Eingaben validierenGuard ClausesFehlercodes zurückgebenRückblick – Sichere DivisionÜbe selbstständig: Online-GDScript-Compiler