Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
В теле каждой процедуры или функции может содержаться вызов других процедур или функций при условии, что они описаны раньше, чем процедура или функция их вызывающая. Однако есть возможность вызывать и те процедуры, которые описаны после вызывающей. Для этого надо скопировать заголовок вызываемой подпрограммы и разместить его выше всех описаний. Например:
{Опережающее описание функции F1 - заголовок без тела функции}
function F1(x: real): real;
procedure P6;
var
x: real;
begin
... {Какие-то действия}
{Вызов функции F1 возможен благодаря опережающему описанию}
x:=F1(x);
... {Какие-то действия}
end;
{Описание функции F1, теперь тело функции присутствует}
function F1(x: real): real;
begin
... {Какие-то действия}
F1 := ... {Что-то}
end;
Это может понадобиться, когда есть две процедуры, вызывающие другу друга, например:
procedure A(n: integer); {Опережающее описание первой процедуры}
procedure B(n: integer); {Опережающее описание второй процедуры}
procedure A(n: integer); {Полное описание процедуры A}
begin
writeln(n);
B(n-1);
end;
procedure B(n: integer); {Полное описание процедуры B}
begin
writeln(n);
if n<10 then
A(n+2);
end;
Процедура A вызывает процедуру B, та в свою очередь вызывает A, а та снова B и т.д. Данная цепочка вызовов закончится, поскольку B вызывается каждый раз с на единицу большим значением параметра n. Когда n перестанет быть меньше 10, процедура B завершится, не вызвав A, что позволит завершиться и прочим процедурам в цепочке.
Следующий раздел:
Предыдущий раздел:
По сути здесь приведён пример сложной рекурсии, но рекурсия как таковая не объясняется. Пример будет, скорее всего, совершенно непонятен.
Не гони. Рекурсия — это не просто вызов самого себя в цепочке вызовов. Это осмысленное применение, чаще всего сокращающий код и ресурсозатраты. Здесь же просто ОБЪЯСНЯЕТСЯ что такое «Опережающее описание», как его объявлять, без ненужного указания зачем в А вызываем Б. Что тут СОВЕРШЕННО, как ты написал, не понятного??? Не отсталый в развитии человек найдет применение этому, хоть в рекурсии, хоть где, ему решать.
И это не сложная рекурсия, а косвенная…
Если верить Википедии, то сложная и косвенная рекурсия это одно и то же.
Искать информацию о правильности применения слова «сложная» к рекурсии смысла не вижу, да и лень, овчинка не стоит выделки. Но из того, что нашел — в английской же версии википедии ни о какой «сложности» рекусии речи не ведется, лишь о ее косвенности (indirect): http://en.wikipedia.org/wiki/Recursion_%28computer_science%29#Direct_and_indirect_recursion . А в нашей википедии понапишут конечно своих слов. Фраза понятна, но слух режет.
forward забыли, нет?