Hilfe zu Thema Rekursion
-
Hallo ich beschäftige mich derzeit mit Rekursive Funktionen.
Ich habe hier ein kleinen Code den ich nicht wirklich verstehe:/* fakul.c */ #include <stdio.h> #include <stdlib.h> long fakul(long n) { if(n) return n * fakul(n-1); return 1; } int main(void) { printf("Fakultät von 5 = %ld\n",fakul(5)); printf("Fakultät von 9 = %ld\n",fakul(9)); system("PAUSE"); return EXIT_SUCCESS; }
Und zwar das verstehe ich nicht ist "n" gleich Null wird ja return 1 ausgeführt aber dann müsste doch folgendes rauskommen:
return 2 * (1) (und durch das return 1 ja 1+1 also eigentlich 2)
Ich hoffe ihr versteht mein Problem und könnt mir helfen.
(Problem ist das mit return 1)
-
Wenn n=2 ist, dann macht die Funktion einfach:
return 2 * fakul(1);
bzw.
return 2 * 1 * fakul(0);
bzw.
return 2 * 1 * 1;So richtig versteh ich nicht was dein Problem ist.
-
ich weiss zwar nicht genau was du meinst mit dem einserproblem aber das letzte kann nur eins sein da null alles null setzen würde.
ausserdem ist der schluss aller funktionen bei zb.: !3 sprich fakultät von 3:
1*2*3=6
da die definition !n= 1*2*3*4...*n ist
-
axo lol this->that hat verstanden was du meinst.
das ist auch klar..
wie gesagt das letzte ist eins und ergebniss dann nochmals mal eins ist sowieso ergebniss. :xmas2:
-
Ah ok jetzt habe ich es verstanden.
Und jeder von return zurückgegebende Wert wird in diesem Beispiel zusammen gerechnet?
-
jaein nicht "zusammengerechnet" im sinne von addiert sondern es sind die einzelnen faktoren. ->multiplikation
frohe weihnachten :xmas2: :xmas1: :xmas2:
-
Verstehe folgendes Beispiel nicht:
/* ggt1.c */ #include <stdio.h> #include <stdlib.h> unsigned long ggt(unsigned long a, unsigned long b) { if(a==b) return a; else if(a < b) return ggt(a, b-a); else return ggt(a-b, b); } int main(void) { unsigned long a, b; printf("ggt = größter gemeinsamer Teiler\n"); printf("Zahl 1: "); scanf("%lu",&a); printf("Zahl 2: "); scanf("%lu",&b); printf("Der ggT von %lu und %lu ist %lu\n", a, b, ggt(a,b)); return EXIT_SUCCESS; }
Wenn man als Zahl1 10 und als Zahl2 2 eingibt wird ja als return immer folgendes zurückgegeben:
return a (return 2)
return ggt(a-b, b) = return 2
return ggt(a-b, b) = return 2
return ggt(a-b, b) = return 2
return ggt(a-b, b) = retzrb 2Wie kommt der Computer auf 5?
-
nimm mal nen debugger und schau dir das an