Лекция: Program Factorial_Up;
Var
N: Integer;
function Fact_Up(i :Integer): Longint;
Var
Mult: Longint;
Begin
if i = 1 then Mult := 1
else Mult := Fact_Up (i-1);
Fact_Up := Mult * i {Накопление факториала стоит после }
{оператора рекурсивного вызова. }
{Следовательно вычисление выполняется на возврате. }
End;
Begin
Write ( 'Введите число n: ');
Readln (n);
Writeln ('Факториал n! = ', Fact_Up (n));
End.
Приведем таблицу трассировки по уровням рекурсии, аналогичную таблице для функции Fact_Dn:
Рис.2. Трассировка значений параметров