Автор Ёкай задал вопрос в разделе Другие языки и технологии
Как работает рекурсивная процедура? и получил лучший ответ
Ответ от 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); //здесь процедура вызывает сама себя (с другими параметрами) ...}Работу вашей процедуры текстом сложно объяснить. Легче в отладчике посмотреть пошагово.
Рекурсивная процедура вызывает сама себя.#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;}
Как создать свой язык программирования ?
В КГТУ (Технологическом университете) на третьем курсе у нас был курсовик по этой теме. Задача -
подробнее...