Реферат: Рекурсия

Содержание

Рекурсия . . . . . . . . . . . . . . . . . . . . . . . . . . 2

Пример 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 2

Пример 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Пример 3 . . . . . . . . . . . . . . . . . . . . . . . . . . 4

Возможно вы искали - Реферат: Русский картинг

Пример 4 . . . . . . . . . . . . . . . . . . . . . . . . . . 4

Пример 5 . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Реку рсия.

Рекурсией называется ситуация, когда процедура или функция сама себя вызывает. Вот типичная конструкция такого рода:

procedure proc(i:integer);

begin

Похожий материал - Реферат: САПР

anweisungen1;

if bedingung then proc(i+1);

anweisungen2;

end;

Вызов proc(1) означает, что proc вызывает себя раз за разом с помощью proc(2), proc(3),.. до тех пор, пока условие bedingung не отменит новый вызов. При каждом вызове выполняется оператор anweisungen 1, после чего порядок выполнения операторов прерывается новым вызовом proc(i+1). Чтобы для каждого вызова был отработан и оператор anweisungen2, все локальные переменные процедуры сохраняются в стеке. Стеком является структура магазинного типа LIFO (Last In First Out), т.е. если, например, при proc(10) условие более не выполняется, anweisungen2 выполняется со значениями, обрабатываемыми в обратном порядке для proc(9),…,proc(1). Локальные параметры помещаются в стек один за другим и выбираются из стека в обратной последовательности (латинское recurrere означает «возвращение назад»).

Очень интересно - Реферат: САПР (Cosmos/M)

В Паскале можно пользоваться именами лишь тогда, когда в тексте программы этому предшествует их описание. Рекурсия является единственным исключением из этого правила. Имя proc можно использовать сразу же, не закончив его описания.

Пример1 представляет собой бесконечную рекурсию, с помощью которой можно установить, насколько велик стек. При этом помните, что при использовании директивы (*$S+*) при переполнении стека получим сообщение об ошибке; а при использовании директивы (*$S-*) – нет, а значит, мы скорее всего столкнемся с зависанием системы. Установкой по умолчанию является (*$S+*). Программа будет прервана с выдачей сообщения об ошибке «Error 202: stack overflow error (“Ошибка 202: переполнение стека»).

Пример1:

Program stack_test;

{программа проверки стека}

Вам будет интересно - Реферат: Синтез и анализ аналоговых и цифровых регуляторов

procedure proc(i:integer);

begin

if i mod 1024 = 0

then writeln(i:6);

proc(i+1);

Похожий материал - Реферат: Системный анализ и проблемы принятия решений

end;

begin

proc(1);

end.