Функция вычисления факториала:
1. Рекуррентное определение
function Factor(n:integer):integer;
var i,f:integer;
begin
f:=1;
for i:=2 to n do f:=f*i;
Factor:=f;
end.
2.Рекурсивное определение
function Fact(n:integer):integer;
var f:integer;
begin
if n=0 then f:=1 else f:=Fact(n-1)*n
end.
При описании рекурсивной процедуры или функции используется сама процедура или функция. Для корректности такого описания необходимо выполнение двух условий:
1. В алгоритме существует нерекурсивная ветка.
2. Необходимо убедиться, что последовательность рекурсивных обращений к подпрограмме, выведет на нерекурсивную ветку алгоритма.
Работа рекурсивной функции вычисления факториала показано на слайдах (прилагаются).
Если при описании процедуры А используется процедура В, а при описании процедуры В используется процедура А, то такая ситуация называется косвенной рекурсией. Чтобы избежать синтаксических проблем при описании таких функций используют опережающее описание. Сначала приводят заголовок процедуры В с директивой FORWARD, а затем описывают тела процедур А и В, соответственно.