Hallo Programmierer,
ich lerne im Studium gerade C/C++. Zur Zeit beschäftigen wir uns mit rekursiven Berechnungen. Kann mir das jemand an einem anschaulichen Beispiel erklären. Wir sollen als Aufgabe ein iteratives berechnendes Fakultätsprogramm nun rekursiv machen.
Die Fakultaetsberechnung ist doch ein schoenes Beispiel. n!=(n-1)!*n ist das Rekursionsschema. Bekanntlich ist 1!=1. Nun kannst Du doch fuer (n-1)!=(n-1-1)!*(n-1) setzen usw. Lange Rede kurzer Sinn: die Funktion fakultaet ruft sich immer wieder selber auf. Erst wenn fakultaet(1) aufgerufen wird ist Schluss. Dann wird rueckwaerts die Fakultaet ausgerechnet.
float fakultaet(float arg)
{
if (arg==1.0)
return(1.0); // Fertig
else
return(arg\*fakultaet(arg-1)); //Selbstaufruf der Funkion fakultaet
}
int main(void)
{
float x=fakultaet(5);
return 0;
}
Viele sachen lassen sich sehr schoen rekursiv erledigen.
z.B. Dateien in einem Verzeichnisbaum suchen (wenn in einem Verzeichnis ein Unterverzeichnis ist, ruft sich die Funktion selbst wieder auf.)
oder das Tuerme von Hanoi Problem…
int fakultaet(int n) {
if (n == 0) {
return 1;
} else {
return n*fakultaet(n-1);
}
}
Die Berechnung der Fakultaet mit Rekursion ist ein recht anschauliches Beispiel, aber eigentlich ist die Berechnung mit einer Schleife besser, weil die nur O(1) Speicher benoetigt und die rekursive Version O(n).
Ein klassisches Beispiel fuer die Anwendung von Rekursionen ist das Durchsuchen eines Verzeichnisbaums.