Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к зачету .doc
Скачиваний:
10
Добавлен:
13.08.2019
Размер:
317.44 Кб
Скачать
  1. Рекурсия.

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

В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (косвенная рекурсия). Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.

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

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

Записи активации в стеке

Procedure p;

Var x,y,z…

End;

+ +

  1. Рекуррентные вычисления. Вычисления рекурсивные и итеративные. Реализация одного и того же алгоритма рекурсивно и итеративно.

Рекурсия и итерации – равносильные механизмы.

Рекурсия используется:

1) при обработке рекурсивных систем данных (дерево – корень, к которому присоединены другие деревья)

2) если обработка частично выполняется на спуске, частично на подъеме

Итеративная схема организации вычислительных процессов реализуется через итеративно вычислимый цикл (while)

Метод рекурсивного спуска – для анализа каждой синтаксической конструкции пишется своя процедура, они вызываются в том порядке, который предписан

Реализация одного и того же алгоритма рекурсивно и итеративно

Вычисления n факториала

Procedure P; I:=0;

Begin F:=1;

If I<n then begin While I<n do begin

I:=I+1; I:=I+1;

F:=I*F; F:=I*F;

P; end;

End;

End;

I:=0;

F:=1;

P.

Рекурсия (фрейм – сохранение через системный стек)

  1. Блочная структура.

Локальные переменные – описаны в данных блоках

Глобальные – в объемлющих блоках

Любой блок внутри другого

Глобальные описания – в любом из объемлющих блоков

Локальное имя важнее глобального

Запись активации – совокупность локальных описаний процедуры

При каждом вызове процедуры создается своя запись активации, которая располагается в стеке (первой закончится та, которая последней началась)

Цели создания блочной структуры:

1) получение высокой надежности

2) локализация изменений при переработке программ

3) экономие памяти ЭВМ

4) упрощение коллективной работы под проектом

Правила видимости: (область действия переменной - та часть программы, в которой доступна данная переменная)

1) вложенные блоки, в которых отсутствует такой же идентификатор

2) тот блок, где описан идентификатор

Побочный эффект – когда процедура изменяет значение глобальной переменной

Связывание – фиксация какого-либо свойства (статич) на этапе трансляции, (динамич) во время выполнения