Лекция: Program Factorial;
Var
N: Integer;
function Fact ( i: Integer ): Longint;
Begin
if i = 1 then Fact := 1
else Fact := i * Fact (i-1)
End;
Begin
Write ('Введите число n: ') ;
Readln (n);
Writeln ('Факториал n! = ', Fact(n));
End.
Содержание и мощность рекурсивного определения, а также главное назначение, состоит в том, что оно позволяет с помощью конечного выражения определить бесконечное множество объектов. Аналогично, с помощью конечного рекурсивного алгоритма можно определить бесконечное вычисление, причем алгоритм не будет содержать повторений фрагментов текста.
Для создания рекурсивных алгоритмов необходимо и достаточно наличие понятия процедуры или функции. Это вытекает из того, процедуры и функции позволяют дать любой последовательности действий (операторов) имя, с помощью которого можно будет эту последовательность действий вызывать.
Например, следующая процедура будет бесконечно печатать известные всем строки:
Program EndLess1;
Procedure PopeAndDog1;
Begin
Writeln('У попа была собака, он ее любил.');
Writeln('Она съела кусок мяса, он ее убил,');
Writeln('похоронил и надпись написал:');
PopeAndDog1
End;
Begin
PopeAndDog1
End.
Однако если оператор вызова процедуры поставить перед выводом текста, как показано ниже:
Program EndLess2;
Procedure PopeAndDog2;
Begin