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 );
}
Alte URL:
/snippet/fakultaet-berechnen-rekursiv/186
Endlosrekursion, wenn für n eine negative Zahl angegeben wird.
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]
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.