Skip to content

Rekursion

Rekursion mit Java.

Rekursion beschreibt, wenn ein Prozess sich selber aufruft. Dies wird oft bei Komposition verwendet (z.B. in Bäumen) oder auch um bestimmte mathematische Funktionen zu modellieren.

Es gibt viele rekursive Bilder. Besonders bekannt ist die Mandelbrot-Menge:

Bild von By Wolfgang Beyer, Wikipedia.

Ein beliebtes Beispiel hier ist die Fakultät, bei welcher eine Fakultät von nn auch als nn mal die Fakultät von n1n-1 beschrieben werden kann.

Das “Teile und Herrsche”-Prinzip (eng.: Divide and Conquer principle) ist ein algorithmischer Lösungsansatz, welcher besagt, dass komplexe Probleme rekursiv aufgeteilt werden können, bis die Lösung für einen solchen kleinen Teil trivial ist.

Bekannte Beispiele für Algorithmen, welche dieses Prinzip verwenden, sind z.B.: Binary Sort und Quick Sort.

void main() {
final int start = 5;
final int factorial = factorial(start);
IO.println("Die Fakultät %d! ergibt %d".formatted(
start, factorial
));
}
int factorial(int n) {
if (n == 1) {
return 1;
}
// Rekursion: factorial(int) ruft sich selber auf
return n * factorial(n - 1);
}

Vorteile von Rekursion

  • Rekursive Lösungsansätze können oft kürzer und einfacher sein.
  • Rekursion mit “Teile und Herrsche”-Prinzip: Multithreading kann möglich sein.

Nachteile von Rekursion

  • Extra overhead bei Methodenaufruf.
  • Schwer debuggable (nicht lesbare Stacktraces).
  • Fehleranfällig bei falsch deklarierten Abbruchbedingungen.
// Fakultät ohne Rekursion
int factorial(int n) {
int out = 1;
for (int i = 2; i <= n; i++) {
out *= i;
}
return out;
}