C Rekursive Funktion - Fakultät

Danny787

Ensign
Registriert
Jan. 2007
Beiträge
180
ich hab eine frage zum folgenden code:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
int number;

int fak (int);


printf("Bitte Zahl eingeben: \n");
fflush(stdout);
scanf("%d", &number);

printf("Fakultät von %d: %u",number, fak(number));

}

int fak (int number){
if (number == 1){
return (1);
}else{
return (number * fak(number - 1));
}
}

mit dem programm lässt sich die Fakultät von einer beliebigen zahl berechnen.
die zeile, welche mir noch nicht so ganz klar ist, hab ich rot markiert.
kann mir jemand vielleicht schritt für schritt und leicht verständlich erklären, was in der zeile genau passiert?

danke schon mal für eure hilfe ;)
 
In der Zeile wird das Unterprogramm bzw die Funktion "Fak" aufgerufen.
Ich denke das weißt du -> ist ja schließlich Rekursion.


Die Funktion Fak startet nun sich selbst wieder.
Allerdings übergibt sie nicht den Wert, der ihr zuvor mitgeteilt wurde, sondern der Wert-1.
Diese Fak ruft dann wieder sich selbst auf, mit dem Wert "Wert-1"-1 usw.



Das bedeutet die Funktion wird so oft aufgerufen bis man bei der Fak mit dem Wert "1" angelangt ist.
Dann werden die Werte zurückgegeben. Immer wieder.

Dadurch wird dann von hinten her bei der Eingabe 7 berechnet:

1*2*3*4*5*6*7

wobei man die 7 eingegeben hat und die Funktion Fak rief sich so oft auf bis der Wert 1 ergab. Dann werden die Werte in der Zeile in rot multipliziert---> Fakultät





Wenn ich wirklich nur beschreiben soll was dort in dieser Zeile passiert:
Return -> gibt den Wert der hintendran steht an die Stelle im Programm zurück, wo die Funktion aufgerufen wurde.
(number * fak(number -1)) hier wird die Funktion wieder aufgerufen, allerdings mit Zahl-1.
 
Zuletzt bearbeitet:
da wird der Wert zurückgeben (return), und zwar der Wert der sich berechnet aus der aktuellen Zahl (number) MAL den Wert von fak(aktuelle zahl - 1). Die Methode ruft sich immer wieder selbst auf, bis eben die Grenze 1 erreicht ist.
rekursion heißt eben, dass die funktion etwas tut und sich dann immer wieder solange selbst aufruft, bis die berechnung zu ende ist z.B. oder eben eine andere Abbruchbedingung erreicht ist.
 
Richtig, denn ansonsten geht's in die Hose, wenn der Nutzer zum Beispiel 0 oder -20 eingibt.

Und noch etwas: gewöhn dir bitte das fflush(stdout) bzw. fflush(stdin) ab. Hier steht warum. Das dort geschriebene kannst du fast 1:1 auch auf stdout übertragen.
 
Zurück
Oben