C/C++ und Rekursion

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.

Schon mal vielen Dank im Voraus,
Claudi

Hallo Claudia !

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…

Tschuess !

Andreas

Fuer die Fakultaet z.B.

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.

Hi Claudi :smile:

Mein Vorschreiber hat eigentlich schon alles erwähnt. Die Funktion läßt sich aber noch erweitern, weil auch 0!=1 ist:

unsigned long fac (unsigned long n) {
 return 0==n ? 1ul : n\*fac(n-1); }

cu Stefan.

Vielen Dank euch allen! :smile:
s.o.