Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
В теле каждой процедуры или функции может содержаться вызов других процедур или функций при условии, что они описаны раньше, чем процедура или функция их вызывающая. Однако есть возможность вызывать и те процедуры, которые описаны после вызывающей. Для этого надо скопировать заголовок вызываемой подпрограммы и разместить его выше всех описаний. Например:
{Опережающее описание функции 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 забыли, нет?