Fakultät Hilfe
-
long double fakult1(unsigned int n) // Iterative Berechnung { long double ergebnis = 1.0; for( unsigned int i = 2; i <= n; ++i) ergebnis *= i; return ergebnis; } long double fakult2(unsigned int n) // Rekursive Berechnung { if( n <= 1) return 1.0; else return fakult2(n-1) * n; }könnt ihr mir bitte helfen, wie der code schritt für schritt ablauft?
danke
-
zeig doch mal, was du schon hast.
-
iterativ:
startwert nehmen, dann rinn in die schleife, zum ergebnis 2 multiplizieren und neien wert in ergebnis speichern, dann schleife ->3. ergebnis (wo schon das produkt 1*2 drinsteht, mit 3 multiplizieren , dann in ergebnis speichern (=6), nächster schleifenaufruf ... usw ... bis n eben.rekursiv:
z.b. übergibste 5, dann wird 5 multipliziert mit fak(4). fak(4) lässt sich noch nicht berechnen, da da auch wieder der funktionsaufruf drinsteht.
bis jetzt haste also:
5fak(4)
= 5*4*fak(3)
=5*4*3fak(2)
=5*4*3*2*fak(1)
fak(1) ist bekannt, nämlich 1.
jetzt weiß damit fak(2), dass sie 2*1 rechnen muss, fak(3) rechnet dann fak(2)=(1*2) *3 usw...
geht von unten wieder hoch, bis die letzte funktion, also die zuerst aufgerufen wurde (nämlich fak(5) ihren wert zurückgibt - fertig.
-
anfängerc++ schrieb:
könnt ihr mir bitte helfen, wie der code schritt für schritt ablauft?
dankefakult1 berechnet die Fakultät nach der einfachen und vermutlich bekannteren Methode:
n! = 1 * 2 * ... * n
Recht viel mehr fällt mir dazu ned ein.
fakult2 verwendet einen rekursiven Ansatz:
1! = 1;
n! = n * (n - 1)!Bsp:
3! = 3 * (3 - 1)! = 3 * 2!
2! = 2 * (2 - 1)! = 2 * 1! = 2 * 1;=> 3! = 3 * 2 * 1;
[edit]
zu spät
[/edit]