Rekursion heißt, dass eine Funktion sich selbst aufruft, um ein Problem in kleinere Ausgaben derselben Art zu zerlegen.
- Rekursion
Ein Verfahren, bei dem eine Funktion sich selbst aufruft, um eine kleinere Ausgabe desselben Problems zu lösen.
Beispiel: „Die Rekursion läuft durch den Menübaum und holt zu jedem Eintrag dessen Unterpunkte.“Herkunft: lateinisch recurrere, zurücklaufen.
Abgrenzung zur Schleife: Die Schleife wiederholt an Ort und Stelle. Die Rekursion legt mit jedem Aufruf eine neue Ebene an und baut sie beim Zurücklaufen wieder ab.
Zwei Teile, von denen keiner fehlen darf
Der eine ist der Abbruchfall: die Ausgabe, die ohne weiteren Aufruf beantwortet wird. Der andere ist der Schritt, der die Aufgabe verkleinert und sich selbst erneut aufruft. Fehlt der Abbruch oder wird die Aufgabe nicht kleiner, läuft die Sache bis zum Absturz.
Der Fehler heißt Stapelüberlauf: Jeder Aufruf belegt Platz, und irgendwann ist er aufgebraucht. Anders als bei einer Endlosschleife bricht das Programm dabei mit einer deutlichen Meldung ab.
function alleSeiten(eintrag) {
const gesammelt = [eintrag.titel];
for (const kind of eintrag.kinder) {
// der Aufruf an sich selbst, eine Ebene tiefer
gesammelt.push(...alleSeiten(kind));
}
return gesammelt; // Abbruch: keine Kinder, keine Aufrufe
}Wo sie in der Webarbeit vorkommt
Überall dort, wo etwas verschachtelt ist und die Tiefe nicht feststeht. Ein Navigationsbaum mit Unterpunkten, eine Dateistruktur, Kommentare mit Antworten auf Antworten. Mit einer Schleife wäre dafür bei jeder Ebene eine weitere Schleife nötig.
In Statamic und TYPO3 arbeiten die Vorlagen für mehrstufige Menüs genau so. Deshalb taucht der Begriff in Projektgesprächen auf, sobald ein Menü mehr als zwei Ebenen bekommen soll.
Wann eine Schleife besser ist
Wenn die Aufgabe flach ist. Über eine Liste zu laufen ist mit einer Schleife kürzer und für die meisten leichter zu lesen. Die Rekursion lohnt sich dort, wo die Daten selbst eine Baumform haben.