Verständnisproblem bei einer Rekursion
-
#include <stdio.h> int fakultaet(int n); int main() { int n; printf(" n n!\n"); for (n = 1; n <= 12; n++) printf("%2d %d\n", n, fakultaet(n)); getchar(); return 0; } int fakultaet(int n) { if (n > 1) return n * fakultaet(n-1); return 1; }
Entschuldigt meine unendliche Dummheit, ich verstehe leider nicht wie Zeile 23 funktionieren soll. Der Code ist ein Beispielcode aus dem Buch >>Programmieren lernen für Teens<< vom Autor Bernd Brügmann.
Meine Denkweise: Der Funktion fakultaet() wird ein Wert übergeben, dieser Wert wiederum wird im if Block geprüft, ob er größer als 1 sei. Falls nein, wird der if Block übersprungen und es wird 1 als Rückgabewert übergeben. Anderfalls sollte sich via return die Funktion selbst aufrufen und zwar sollte sich der übergebene Wert n beim ersten Aufruf sich mit dem selbst aufgerufenen n-1 multiplizieren. Dann wird n-1 zum "neuen n" also 3 dieser wird wiederrum mit dem wieder selbst aufgerufenen Wert n-1 also 2 multipliziert.
43
32... macht ja dann 72!?
4! = 4*3*2*1 = 24
-
Hallo
Vielleicht kann dir das Kapitel 11.20 im Buch "C von A bis Z" etwas zu deinem Verständnis beitragen.
http://www.win-tux.de/c_011_019.htm#RxxobKap0110190400277A1F04618C
Dieses Kapitel behandelt ausführlich die Arbeit mit rekursiven Funktionen sowie die allgemeine Funktionsweise des Stacks bei Funktionsaufrufen...
Grüsse, Ratio
-
schreib's dir einfach aus
fakultaet(4) 4*fakultaet(3) 4*3*fakultaet(2) 4*3*2*fakultaet(1) 4*3*2*1