Содержание
Рекурсия . . . . . . . . . . . . . . . . . . . . . . . . . . 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.