function faktorialfunc(n:longint):longint;
var
   f,k:longint;
   begin
       f:=1;
       for k:=1 to n do
       f:=f*k;
       faktorialfunc:=f;
   end;
procedure faktorialproc(n:longint;var hasil:longint);
var
   f,k:longint;
   begin
       f:=1;
       for k:=1 to n do
       f:=f*k;
       hasil:=f;
   end;
function faktorialfuncrekursif(n:longint):longint;
begin
    if n=0 then
       faktorialfuncrekursif:=1
    else
       faktorialfuncrekursif:=n*faktorialfuncrekursif(n-1);
end;
procedure faktorialprocrek(n:longint;var hasil:longint);
var
   h:longint;
begin
   if n=0 then
      hasil:=1
   else
       begin
           faktorialprocrek(n-1,h);
           hasil:=n*h;
       end;
end;