Einführung in die Rekursion
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 45 von 56.
Rekursion ist eine Programmiertechnik, bei der eine Funktion sich selbst aufruft, um ein Problem zu lösen. Anstatt Schleifen zu verwenden, zerlegen rekursive Funktionen komplexe Probleme in kleinere, ähnliche Teilprobleme, bis sie einen einfachen Fall erreichen, der direkt gelöst werden kann.
Jede rekursive Funktion muss zwei wesentliche Komponenten haben. Der Basisfall ist eine Bedingung, die die Rekursion stoppt – ohne ihn würde sich die Funktion ewig selbst aufrufen. Der Rekursionsschritt ist der Teil, in dem die Funktion sich selbst mit geänderten Parametern aufruft und sich mit jedem Aufruf dem Basisfall nähert.
Hier ist ein einfaches Countdown-Beispiel, das Rekursion demonstriert:
void countdown(int n) {
if (n <= 0) { // Basisfall: Stoppen, wenn n 0 erreicht
std::cout << "Done!" << std::endl;
return;
}
std::cout << n << std::endl;
countdown(n - 1); // Rekursiver Schritt: Aufruf mit n-1
}Wenn Sie countdown(3) aufrufen, wird 3 ausgegeben, dann countdown(2) aufgerufen, was 2 ausgibt, dann countdown(1) aufgerufen und so weiter, bis der Basisfall erreicht ist. Jeder Funktionsaufruf wartet auf den Abschluss des nächsten, bevor er beendet wird, wodurch eine Kette von Aufrufen entsteht, die schließlich zum ursprünglichen Aufrufer zurückgeführt wird.
Spickzettel
Rekursion bedeutet, dass eine Funktion sich selbst aufruft, um ein Problem zu lösen, indem sie es in kleinere Teilprobleme zerlegt.
Jede rekursive Funktion benötigt:
- Basisfall: Bedingung, die die Rekursion stoppt
- Rekursionsschritt: Die Funktion ruft sich selbst mit geänderten Parametern auf
Beispiel für eine Countdown-Funktion:
void countdown(int n) {
if (n <= 0) { // Basisfall
std::cout << "Done!" << std::endl;
return;
}
std::cout << n << std::endl;
countdown(n - 1); // Rekursionsschritt
}Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung4Maps (Schlüssel-Wert-Paare)
Einführung in std::mapErstellen einer MapWerte abrufen und ändernAuf Schlüssel prüfenPaare entfernenÜber eine Map iterierenZusammenfassung – Wortfrequenz7Fortgeschrittene Funktionen
ReferenzübergabeEinführung in Lambda-AusdrückeLambdas mit ParameternLambdas mit RückgabewertenEinführung in die RekursionRekursive FakultätLambda Sort2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügen