Program EndLess2;

End.

PopeAndDog1

Begin

End;

PopeAndDog1

Begin

Procedure PopeAndDog1;

Program EndLess1;

End.

Readln (n);

Begin

End;

Begin

N : Integer;

Var

function Fact ( i : Integer ): Longint;

if i = 1 then Fact := 1

else Fact := i * Fact (i-1)

Write ('Введите число n: ') ;

Writeln ('Факториал n! = ', Fact(n));

Содержание и мощность рекурсивного определения, а также главное назначение, состоит в том, что оно позволяет с помощью конечного выражения определить бесконечное множество объектов. Аналогично, с помощью конечного рекурсивного алгоритма можно определить бесконечное вычисление, причем алгоритм не будет содержать повторений фрагментов текста.

Для создания рекурсивных алгоритмов необходимо и достаточно наличие понятия процедуры или функции. Это вытекает из того, процедуры и функции позволяют дать любой последовательности действий (операторов) имя, с помощью которого можно будет эту последовательность действий вызывать.

Например, следующая процедура будет бесконечно печатать известные всем строки:

Writeln('У попа была собака, он ее любил.');

Writeln('Она съела кусок мяса, он ее убил,');

Writeln('похоронил и надпись написал:');

Однако если оператор вызова процедуры поставить перед выводом текста, как показано ниже: