Rekursion

Rekursion

"Um die Rekursion zu verstehen, muss man zuerst die Rekursion verstehen"

lat. recurrere: zurĂĽcklaufen

Informatik: "eine Funktion, die sich selbst aufruft"

man spricht von: rekursiven Funktionen / Methoden / Prozeduren (Aufruf selbst: Rekursion)
wichtig: benötigt Terminierungs- / Abbruchbedingung (damit nicht endlos)

Idee / Prinzip: Teile und Herrsche
"Problem auf ein einfacheres, aber gleichartiges zurĂĽckzufĂĽhren"

Rekursion vs. Iteration

jede Schleife lässt sich durch eine Rekursion ersetzen

iterativ

schleife(bedingung) {  
    // machetwas  
}  

orientiert sich stärker an der Ausführung / Optimierung der Algorithmen auf sequenziell arbeitenden Maschinen

rekursiv

void schleife() {  
    if(bedingung) {  
        //machetwas  
        schleife();  
    }  
}  

kompakte, klar strukturierte und leicht zu verifizierende Funktionsdefinitionen

Form: direkt ĂĽber eine oder indirekt (wechselseitig) ĂĽber mehrere Funktionen

Beispiel

iterativ

#include <stdio.h>  

void printLines(int x) {  
    while(x > 0) {  
        printf("\nlineNR. %d", x);  
        x--;  
    }  
}  

int main() {  
    printLines(5);  
    return 0;  
}  

rekursiv

#include <stdio.h>  

void printLines(int x) {  
    if(x > 0) {  
        printf("\nlineNR. %d", x);  
        printLines(x-1);  
    }  
}  

int main() {  
    printLines(5);  
    return 0;  
}  

Vor- und Nachteile

📋 Fakultät

Schreibe eine rekursive Funktion, die die Fakultät einer nicht-negativen ganzen Zahl berechnet. Die Fakultät von n (geschrieben als n!) ist das Produkt aller positiven ganzen Zahlen kleiner oder gleich n. Beachte den Basisfall für 0!

đź“‹ TĂĽrme von Hanoi

Eine beliebige Anzahl an Scheiben sollen sich von A nach C bewegen.
Wie viele Schritte werden benötigt um den Transfer durchzuführen?

Hanoi

Regeln: