Z uwagi na szybkość wzrostu wartości funkcji - można rozważyć użycie typu np. extended zamiast typów całkowitych które dają możliowść obliczenia maksymalnie wartości 12!
function silnia1(n:integer):integer; var s,i:integer; begin s:=1; for i:=1 to n do s:=s*i; Result:=s; end;
Przykład abstrahuje od kwestii poprawności wywołania (tj. sprawdzania czy n>=0)
function silnia2(n:integer):integer; begin if n<=1 then Result:=1 else Result:=n*silnia2(n-1); end;