Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec03-АТП2011-12.doc
Скачиваний:
0
Добавлен:
08.11.2018
Размер:
78.85 Кб
Скачать
    1. Рекурсия

Рекурсия – это обращение подпрограммы к самой себе. Чтобы такое обращение не было бесконечным, в теле подпрограммы должно быть условие, по достижении которого дальнейшего обращения не происходит. Это требование является главным требованием к рекурсивным процедурам

Пример рекурсивного вычисления факториала:

Математически функция вычисления факториала определяется так:

0!=1

n!=n*(n-1)!

Program Recurce;

{Функция для рекурсивного вычисления факториала}

Function Factorial(N:Byte):Longint;

Begin

If N=0 then Factorial:=1

Else Factorial:=N*Factorial(N-1);

End;

BEGIN

WriteLn(Factorial(6));

END.

Формы рекурсивных подпрограмм:

  1. С выполнением действий на рекурсивном спуске (действия выполняются до рекурсивного вызова)

Пример

Procedure Proc1;

Begin

действия;

If условие then Proc1;

End;

  1. С выполнением действий на рекурсивном возврате (действия выполняются после рекурсивного вызова)

Пример

Procedure Proc2;

Begin

If условие then Proc2;

действия;

End;

  1. С выполнением действий как на возврате, так и на спуске.

Чаще всего рекурсивные подпрограммы используются при обработке списковых или древовидных структур данных (Например, при разработке трансляторов выполняется построение дерева разбора).

Встречается также косвенная рекурсия. В этом случае первая процедура вызывает вторую, а вторая – первую. При использовании косвенной рекурсии требуется опережающее описание – к заголовку процедуры добавляется зарезервированное слово Forward.

Пример косвенной рекурсии:

Procedure Test2; Forward;

Procedure Test1;

Begin

. . .

Test2;

. . .

End;

Procedure Test2;

Begin

. . .

Test1;

. . .

End;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]