Die Rekursion ist ein grundlegendes Konzept in der Programmierung, das sich besonders für Probleme eignet, die sich in kleinere, gleichartige Teilprobleme zerlegen lassen. Es ist ein mächtiges Werkzeug, um Probleme elegant zu lösen. Dabei sind eine klare Abbruchbedingung und ein verständliches Rekursionsmuster sehr wichtig.
Rekursion bezeichnet dabei eine Methode, die sich selbst aufruft, bis eine bestimmte Abbruchbedingung erreicht ist.
Ein rekursiver Algorithmus besteht dabei aus zwei Hauptkomponenten:
Die Fakultätsberechnung zeigt gut, wie eine Methode sich selbst aufruft und das Problem in kleinere Teilprobleme zerlegt.
Die Fakultät einer Zahl n wird definiert als:
n! = n * (n - 1) * (n - 2) * ... * 1
Mit der rekursiven Definition:
n! = n * (n - 1)! für n > 00! = 1 (Basisfall)Implementierung in Java:
public class RekursionBeispiel {
public static int fakultaet(int n) {
// Basisfall: Sobald n 0 erreicht, stoppen wir die Rekursion
if (n == 0) {
return 1;
}
// Rekursiver Fall: n * fakultaet(n - 1)
return n * fakultaet(n - 1);
}
public static void main(String[] args) {
int zahl = 5;
System.out.println(zahl + "! = " + fakultaet(zahl));
}
}
Wenn wir also fakultaet(5) aufrufen, passiert folgendes:
5 * fakultaet(4)4 * fakultaet(3)3 * fakultaet(2)2 * fakultaet(1)1 * fakultaet(0), wobei fakultaet(0) = 1 der Basisfall ist
Dabei werden die Ergebnisse von unten nach oben zurückgegeben:
1 * 1 = 12 * 1 = 23 * 2 = 64 * 6 = 245 * 24 = 120Ergebnis: 5! = 120
Mir persönlich hat diese Schreibweise hier sehr für das Verständnis geholfen:
5! = 1 * 2 * 3 * 4 * 5 = 120
Rekursion eignet sich also besonders bei Problemen mit natürlicher Selbstähnlichkeit. Man sollte Rekursion aber immer vermeiden, wenn zu viele rekursive Aufrufe entstehen könnten, sodass es in der Folge zu einer StackOverflowException kommt. In vielen Fällen kann eine iterative Lösung auch effizienter sein.
Ich hoffe sehr, dass dieses einfache Beispiel dir geholfen hat, Rekursion zu verstehen und wie man diese in Java-Code umsetzen kann. Nach diesem Beispiel solltest du in der Lage sein, eine rekursive Methode in Java schreiben zu können.
Hast du selbst schon mal mit Rekursion zu tun gehabt und vielleicht auch Schwierigkeiten gehabt, den Ablauf zu verstehen? Lass es mich gern in den Kommentaren wissen!
