📘 Kapitel 4 · Funktionen & Strukturierung

Rekursion

Funktionen die sich selbst aufrufen · Basisfall · Fakultät · Fibonacci

20 / 30 Units
Ömer
Kapitel 4: Funktionen & Strukturierung ~45 Min. Theorie + Simulator + Quiz + Spickzettel
Ömer
Ömer sagt:

Rekursion klingt verrückt, ist aber elegant: Eine Funktion ruft sich selbst auf, mit einem kleineren Problem. Das Wichtigste: der Basisfall – sonst läuft es ewig!

Was ist Rekursion?

1. Basisfall (Base Case)

Wann stoppt die Rekursion? Ohne Basisfall: Stack Overflow!

2. Rekursionsfall

Die Funktion ruft sich selbst mit einem kleineren Argument auf.

Fakultät – das klassische Beispiel

fakultaet.cC
int fakultaet(int n) {
    if (n == 0) return 1;     // Basisfall
    return n * fakultaet(n-1); // Rekursionsfall
}
Aufrufkette: fakultaet(4) = 24
f(4) → 4 × f(3)
f(3) → 3 × f(2)
f(2) → 2 × f(1)
f(1) → 1 × f(0)
f(0) = 1 ← Basisfall!
→ 1
→ 2
→ 6
→ 24

Aufbau einer rekursiven Funktion

BestandteilBedeutungBei Fakultät
BasisfallWann stoppt die Rekursion?n == 0 → return 1
RekursionsfallWie wird das Problem kleiner?n * fakultaet(n-1)
AufrufketteWie baut sich der Stack auf?f(4)→f(3)→f(2)→f(1)→f(0)

Häufige Fehler

Warnung: Typische Rekursionsfehler

  • Kein Basisfall: Die Funktion ruft sich endlos selbst auf → Stack Overflow (Absturz!). Jede rekursive Funktion braucht zwingend einen Basisfall.
  • Basisfall nie erreicht: Die Bedingung ist falsch formuliert, sodass der Basisfall übersprungen wird. Beispiel: fakultaet(-1) würde ewig rekursieren wenn keine Prüfung auf negative Zahlen vorhanden ist.
  • Zu tiefe Rekursion: Jeder Aufruf belegt Stack-Speicher. Bei sehr großen Eingaben (z.B. fakultaet(100000)) ist das Stack-Limit schnell erreicht → Absturz.
sicher.cC
int fakultaet(int n) {
    if (n < 0) return -1;  // Schutz vor negativen Zahlen
    if (n == 0) return 1;   // Basisfall
    return n * fakultaet(n - 1);
}

Wann Rekursion, wann Schleife?

RekursionSchleife
LesbarkeitElegant für natürlich-rekursive ProblemeKlarer für einfache Wiederholungen
PerformanceLangsamer (Stack-Overhead)Schneller
GefahrStack OverflowEndlosschleife
TypischBaumstrukturen, Fibonacci, QuicksortAlle anderen

⚡ Code-Simulator

Schreibe eigene Funktionen und teste sie – der Simulator zeigt printf-Ausgaben:

C Simulator – Unit 20 – Funktionen
▶ Ausgabe
– Klicke AUSFÜHREN –
Ömer
Ömer sagt:

Schreibe eigene Funktionen und ändere die Argumente beim Aufruf. So siehst du direkt wie Funktionen Daten verarbeiten!

🎯 Wissens-Quiz

Frage 1
Welche zwei Teile hat jede korrekte rekursive Funktion?
ASchleife und if
BBasisfall und Rekursionsfall
CParameter und Rückgabe
Dmain() und Aufruf
Frage 2
Was passiert ohne Basisfall bei einer rekursiven Funktion?
ASie gibt 0 zurück
BCompilerfehler
CEndlosrekursion / Stack Overflow
DSie läuft einmal
Frage 3
Was gibt fakultaet(0) zurück?
A0
B1
CFehler
DUnendlich
Frage 4
Was gibt fibonacci(5) zurück? (0,1,1,2,3,5,8...)
A3
B4
C5
D6
Frage 5
Ist Rekursion immer die beste Lösung?
AJa
BNein – Schleifen sind oft einfacher und schneller
CJa, weil es eleganter ist
DNein, Rekursion ist verboten
Frage 6
Was ist zwingend notwendig damit Rekursion terminiert?
AEine Schleife innerhalb der Funktion
BEin Basisfall der die Rekursion stoppt
CEin return am Anfang der Funktion
DEine globale Variable als Zähler
Frage 7
Was passiert wenn eine rekursive Funktion keinen Basisfall hat?
ASie gibt automatisch 0 zurück
BDer Compiler meldet einen Fehler
CStack Overflow / Absturz durch Endlosrekursion
DDie Funktion wird nur einmal ausgeführt
Frage 8
Was ist der Unterschied zwischen direkter und indirekter Rekursion?
ADirekte Rekursion ist schneller
BIndirekte Rekursion braucht keinen Basisfall
CEs gibt keinen Unterschied
DDirekt: Funktion ruft sich selbst. Indirekt: f() ruft g() ruft f()

📋 Spickzettel

Rekursion
BasisfallWann stoppen?
RekursionsfallSelbst aufrufen mit n-1
Basisfall = Pflicht!Sonst Stack Overflow
n! = n × (n-1)!Fakultät-Formel
Beispiele
fakultaet(n)n * fak(n-1)
fibonacci(n)fib(n-1)+fib(n-2)
summe(n)n + summe(n-1)
potenz(b,e)b * pot(b,e-1)

✅ Checkliste Unit 20

  • Ich kann Basisfall und Rekursionsfall benennen
  • Ich kann eine einfache rekursive Funktion schreiben
  • Ich verstehe die Aufrufkette (Call Stack)
  • Ich kenne die rekursive Fakultät und Fibonacci-Funktion