Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
35
Добавлен:
12.05.2015
Размер:
306.69 Кб
Скачать

Рекурсия

1

Общие положения

Рекурсия — возвращение

Рекурсивные алгоритмы (или алгоритмы с возвратом ) — это алгоритмы, которые используют в качестве вспомогательного (или подчинённого) самого себя

Рекурсия (в программиравании)— это способ организации вычислительного процесса при котором подпрограмма, в ходе выполнения составляющих её операторов, обращается сама к себе (вызывает сама себя)

2

Виды рекурсии

Прямая рекурсия — явное обращение к подпрограмме

Procedure P;

Begin

P;

End;

Косвенная рекурсия — обращение к подпрограмме через цепочку подпрограмм

Procedure А;

Procedure В;

Begin

Begin

В;

А;

End;

End;

3

{ Бесконечная рекурсия }

Procedure Prn;

Begin

Writeln ( ‘Привет’ );

Prn

End;

{--------------}

Begin

Prn

End.

Протокол роботи програми.

Привет

Привет

4

Структура программы в оперативной

памяти

В IBM PC-совместимых

 

 

 

Динамическая память

 

 

 

компьютерах память

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

условно разделена на

 

 

 

Сегмент стека

 

 

 

сегменты.

 

 

 

 

 

 

 

 

 

 

 

Сегмент данных

 

 

 

Адрес каждого байта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

составляется из номера

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сегмента и смещения.

 

 

 

Сегмент кода

 

 

 

Компилятор формирует

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сегмент кода, в котором

 

 

 

16 бит

4 бита

 

хранится программа в виде

 

 

 

 

 

 

 

 

машинных команд, и

 

 

 

 

 

 

 

 

 

 

 

Адрес сегмента

 

0000

 

сегмент данных, в

 

 

 

 

 

+

 

 

 

 

 

 

 

 

 

16 бит

 

 

 

котором выделена память

 

 

 

 

 

 

 

 

под глобальные

 

 

 

Смещение

 

 

 

 

 

 

 

 

 

 

переменные программы.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Физический адрес

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

20 бит

 

 

 

5

Главное требование к

рекурсивным

подпрограммам

Рекурсивное обращение к подпрограмме должно подчинятся какому –либо условию, которое в какой – то момент времени перестаёт выполнятся ( т.е. организовать выход из рекурсии)

6

Var

n : integer;

Procedure Prn ( n : integer);

Begin

If n > 0 then

begin

 

Writeln ( ‘Привет ’, n);

Prn (n-1);

End;

End;

{--------------}

Begin

n:=3;

Prn (n);

End.

Протокол роботи програми.

Привет 3

Привет 2

Привет 1

7

Рекурсивные подпрограммы

function FTR(n : byte): longint; begin

if (n = 0) or (n = 1) then FTR := 1 else FTR := FTR(n - 1) * n;

end;

----------

A := FTR(4);

стек

n = 1

 

 

n = 2

 

 

n = 3

 

 

n = 4

8

Внутренний механизм

рекурсии

Обращение к другому экземпляру этой же подпрограммы (4 шага)

9

Физическое

представление рекурсии

10