Beiträge durchsuchen

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*10Die 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.