pRogram Zdn_3;
var Fct:byte;
Function Factor(F:byte):longint;
Begin
If f=0 Then Factor:=1
Else Factor:=Factor(F-1)*F
End;
BEGIN
Write(’F! (0<=F<=255) / F= ‘);
Readln(Fct);
Writeln(’Factorial ‘,Fct,’! = ‘,Factor(Fct));
Readln;
END.
Рекурсия – это такой способ организации вычислительного процесса, при котором подпрограмма в ходе выполнения составляющих ее операторов обращается сама к себе.
Пример вычисления факториала. Подпрограмма получает от компанента edInput целое число N и выводит в компонент mmOutput значение N!, которое вычисляется с помощь рекурсивной функции Faktorial.
Procedure TfmExample.bbRunClick (Sender: TObject);
Function Factorial (N: Word): Extended;
Begin
If N = 0 then
Result :=1
Else
Result:= N * Factorial (N-1)
End;
Var
N: Integer;
Begin
Try
N:= StrToInt (Trim(edInput.Text));
Except
Exit;
End;
mmOutput.Lines.Add(edInput.Text+
‘!=’+FLoatToStr(Factorial(N)));
edInput.Text:=’ ‘;
edInput.SetFocus
end;
Рекурсивный вызов может быть косвенным. В этом случае подпрограмма оброщается к себе опосредственно, путем вызова другой подпрограммы, в которой содержится обращение к первой, например:
Procedure A (i: Byte);
Begin
…
B (i);
…
End;
Procedure B (j : Byte);
…
Begin
…
A (j);
…
End;