Feedback

Fakultät berechnen (rekursiv)

Sprache: C#

Berechnet rekursiv die Fakultät einer Zahl.
public int Faculty( int n )
{
    return n == 0 ? 1 : n * Faculty( n-1 );
}
public int Faculty( int n )
{
    return n == 0 ? 1 : n * Faculty( n-1 );
}

3 Kommentare

  1. Die iterative Variante ist besser. Zum einen schneller – weniger Overhead – und zum anderen sicherer gegen Stapelüberlauf.
    [code]
    private static int Fakultät(int zahl)
    {
    if (zahl < 0) throw new ArgumentOutOfRangeException("Zahl darf nicht kleiner 0 sein"); int fakultät = 1; if (zahl == 0 || zahl == 1) fakultät = 1; else { for (int i = 1; i <= zahl; i++) fakultät *= i; } return fakultät; } [/code]

  2. Tausche das int im Methodenkopf gegen ein [b]uint [/b]und den Rückgabewert gegen ein [b]ulong [/b]aus. So hast du
    1. kein Problem mehr mit negativen Zahlen
    2. kannst größere Fakultäten verarbeiten

    ich testete es mehrmals ob iterativ scheller als rekursiv ist, dem war erst so als ich mehrere tausend Berechnungen hintereinander durchführte, sonst war immer das rekursive vorne.