Entschuldige bitte die Kritik, aber das ist m.E. viel zu kompliziert implementiert, was auch zu einer schlechten Lesbarkeit und Fehleranfälligkeit führt.
Du führst unnötigerweise den Endwert und das Zwischenergebnis bei jedem Funktionsaufruf mit. Dabei wird unnütz viel Stack verbraucht. Bei der Fakultät wird zwar wohl erst der Integerüberlauf vor einem Stacküberlauf eintreten, aber man sollte doch seine Resourcen gerade bei Rekursionen nicht unnötig verschwenden.
Günstiger ist es hier, das Pferd von hinten aufzuzäumen:
Delphi-Quellcode:
function Fakultaet(n: Integer): Integer;
begin
if n = 1 then
result := 1
else
result := n*Fakultaet(n-1);
end;