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*3
    fak(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?
    danke

    fakult1 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]


Anmelden zum Antworten