Fakultät
Die Fakultät ist eine Funktion, die jeder natürlichen Zahl das Produkt ihrer Vorgänger mit sich selbst zuordnet. In der Mathematik schreibt man für „Fakultät von n“ einfach „n!
„. Die Fakultät wächst sehr schnell, weshalb schon 21!
nicht mehr in einen Int64
passt.Beispiel: Fakultät von 10: 10! = 1*2*3*4*5*6*7*8*9*10
Die Fakultät lässt sich auf rekursiven und iterativem Wege bestimmen. Die rekursive ist mit der Zeit “das“ Standard-Beispiel für Rekursion geworden, wenngleich die iterative Lösung ähnlich einfach, aber performanter ist, weshalb man diese bevorzugen sollte.Rekursive Variante:
uses Math; function Factorial(n : Cardinal): Int64; begin if n > 20 then raise EInvalidArgument.CreateFmt('%d! kann nicht berechnet werden. Ergebnis zu groß.', [n]); if n <= 1 then Result := 1 else Result := n * Factorial(n - 1); end;
Iterative Variante:
uses Math; function Factorial(n : Cardinal): Int64; var i: Integer; begin if n > 20 then raise EInvalidArgument.CreateFmt('%d! kann nicht berechnet werden. Ergebnis zu groß.', [n]); Result := 1; for i := 2 to n do begin Result := Result * i; end; end;
Aufgerufen werden kann die Funktion beispielsweise so:
procedure TForm1.Button2Click(Sender: TObject); begin ShowMessage(IntToStr(Factorial(10))); end;
Als Ergebnis gibt die Funktion in diesem Falle '3628800'
zurück. Weitere Informationen zur Fakultät finden sich u.a. im entsprechenden Wikipedia-Artikel.