
Rekursion ist wie Matrjoschka-Puppen: Eine Funktion, die sich selbst aufruft – aber mit einem kleineren Problem. Das klingt verrückt, ist aber ein elegantes Konzept! Das Wichtigste: Es muss einen Basisfall geben, sonst läuft es ewig! 🪆
🪆 Was ist Rekursion?
Eine rekursive Funktion ruft sich selbst auf – aber mit einem kleineren oder vereinfachten Problem. Sie muss zwei Teile haben:
1. Basisfall (Base Case)
Die Bedingung, bei der die Funktion aufhört sich selbst aufzurufen. Ohne Basisfall: Endlosrekursion!
Beispiel: Fakultät(0) = 1 → stop!
2. Rekursionsfall
Die Funktion ruft sich selbst auf, aber mit einem kleineren Argument. Das Problem wird kleiner bis zum Basisfall.
Beispiel: Fakultät(n) = n × Fakultät(n-1)
💻 Klassiker: Fakultät
Die Fakultät von n (geschrieben n!) ist: n! = n × (n-1) × (n-2) × ... × 1. Also: 5! = 5 × 4 × 3 × 2 × 1 = 120
#include <stdio.h> int fakultaet(int n) { if (n == 0) return 1; // Basisfall: 0! = 1 return n * fakultaet(n-1); // Rekursionsfall } int main() { printf("5! = %d\n", fakultaet(5)); // 120 printf("3! = %d\n", fakultaet(3)); // 6 return 0; }
💻 Fibonacci-Zahlen
Die Fibonacci-Folge: 0, 1, 1, 2, 3, 5, 8, 13... Jede Zahl ist die Summe der zwei vorherigen:
int fibonacci(int n) { if (n <= 1) return n; // Basisfall: fib(0)=0, fib(1)=1 return fibonacci(n-1) + fibonacci(n-2); } int main() { for (int i = 0; i < 8; i++) printf("%d ", fibonacci(i)); }
✏️ Übungen
Basisfall und Rekursionsfall finden
Beschreibe Basisfall und Rekursionsfall für die Funktion summe(n) die 1+2+...+n berechnet:
Basisfall (wann stoppt die Rekursion?):
Rekursionsfall:
Aufrufkette zeichnen
Zeichne die Aufrufkette für fakultaet(3) und zeige alle Zwischenschritte:
Rekursive Summe
Schreibe eine rekursive Funktion summe(int n), die 1 + 2 + 3 + ... + n berechnet:
Potenz rekursiv
Schreibe eine rekursive Funktion potenz(int basis, int exp), die basis^exp berechnet. (Basisfall: exp == 0 → 1. Rekursionsfall: basis × potenz(basis, exp-1))
Fibonacci: iterativ vs. rekursiv
Schreibe Fibonacci sowohl rekursiv als auch iterativ und vergleiche die Ergebnisse. Bei großen Zahlen ist die iterative Version viel schneller – erkläre warum: