Рекурсия – Опережающие объявления
В Турбо Паскале существует правило: перед употреблением любой элемент программы должен быть объявлен. Если строго следовать этому правилу, то реализовать косвенную рекурсию в Турбо Паскале невозможно. Для того чтобы это все же можно было сделать, в язык введены так называемые опережающие объявления (описания). Для задания опережающих объявлений используется директива компилятора Forward, которая позволяет объявить имя подпрограммы, отложив при этом ее окончательное определение, т.е. объявление проводится в два этапа. На первом задаются имя подпрограммы и параметры, за которыми следует атрибут Forward. Позднее появляется полное определение подпрограммы, но в ее заголовок не включается список параметров. Ниже приведен фрагмент программы, являющийся примером задания косвенной рекурсии.
Пример. Процедура First вызывает процедуру Second, а та, в свою очередь, процедуру First.
Procedure First(A, В: Integer); Forward; {Заголовок первой процедуры}
Procedure Second(C: Real); {Вторая процедура}
Var X, Y: Integer;
begin
…
First(X, Y);
…
end;
Procedure First; {Снова краткий вызов первой процедуры}
Var Z: Real;
begin
Second(Z);
end;
Директиву Forward можно использовать не только в рекурсивных подпрограммах, но и для более удобного размещения подпрограмм: сначала описать все заголовки, а затем – сами подпрограммы. Эту директиву не следует использовать в модулях для подпрограмм, объявленных в интерфейсе модуля
опишите лучше как использовать рекурсию в более современных языках программирования, Паскаль уже отстал.