дерево вызова процедур и программ



Автор Ёкай задал вопрос в разделе Другие языки и технологии

Как работает рекурсивная процедура? и получил лучший ответ

Ответ от Ra[гуру]
Попробуйте построить на листке бумаги дерево вызовов. Мне делать это лень, но некоторое псевдографическое представление о работе данной процедуры может дать ее модификация таким образом:
procedure f(n:integer; d: integer);
var
i: integer;
begin
for i := 0 to d do write ('-');
write(' * ', 'вызов f(', n, ')');
if n>0 then
begin
writeln;
f(n-2, d + 1);
f(n div 3, d + 1);
end
else
writeln(' условие n > 0 не выполняется (n = ', n, ') - завершение рекурсии');
end;
begin
f(7, 0);
end.
здесь дополнительный параметр d -- это глубина рекурсии, т. е. количество вложенных вызовов (как матрешка, только в данном случае матрешка не одномерная, а двумерная 🙂 . Почитайте параграф 1.2.2, там как раз рассмотрен случай древовидной рекурсии и дан пример дерева вызовов. Заметьте, что в данной процедуре внутри ее тела, процедура вызывается два раза, т. е. получается именно дерево, а не линейная последовательность вложенных вызовов.
> Рекурсивная процедура вызывает сама себя.
Небо голубое, вода мокрая, ..(© х/ф Последний бойскаут) , а рекурсивная подпрограмма вызывает сама себя.
Почему-то предыдущие ответчики постеснялись упомянуть тот факт, что корректная рекурсивная подпрограмма всегда имеет условие завершения рекурсивного процесса или может иметь даже несколько таких условий.

Ответ от Алексей Молчанов[гуру]
Чтобы понять, что такое рекурсия, надо понять, что такое рекурсия.Рекурсивная процедура в своём теле вызывает сама себя.procedure AnyCode (Parametr : Integer){ ... AnyCode(Parametr); //здесь процедура вызывает сама себя (с другими параметрами) ...}Работу вашей процедуры текстом сложно объяснить. Легче в отладчике посмотреть пошагово.

Ответ от Ra Орально (98783)[гуру]
Рекурсивная процедура вызывает сама себя.#include <Windows.h>void foo(int x){foo(x+1);}int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow){ foo(7); return 0;}

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Как работает рекурсивная процедура?

Как создать свой язык программирования ?
В КГТУ (Технологическом университете) на третьем курсе у нас был курсовик по этой теме. Задача -
подробнее...
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*