Косвенная рекурсия
End.
Reverse
Begin
End;
End
Write (Ch);
Reverse;
Read (Ch) ;
Begin
If not EoLn then
Begin
Var
Procedure Reverse;
Program Reverse_String;
Комбинация прямой и обратной рекурсии
End.
Приведем таблицу трассировки по уровням рекурсии, аналогичную таблице для функции Fact_Dn:
Рис.2. Трассировка значений параметров
Третью форму рекурсивных подпрограмм покажем на примере следующей задачи.
Задача. Вывести на печать символы введенной строки 'HELLO' в обратном направлении.
Решение этой задачи выполнено в виде показанной ниже программы Reverse_String,использующей рекурсивную процедуру Reverse. Напомним, что функция EoLn возвращает значение, равноеFalse, если строка еще не окончилась, и значение, равное True, когда считывается последний символ строки.
Ch : Char;
Если после запуска программы на выполнение в качестве входной строки ввести слово 'HELLO', то соответствующая такой исходной строке таблица трассировки по уровням рекурсии будет иметь следующий вид:
Рис.3. Трассировка значений параметров
Косвенной или взаимной рекурсией называется организация вызовов нескольких процедур и функций по кругу (первая процедура вызывает вторую, вторая - третью, ..., n-я процедура вызывает первую).
Для реализации косвенной рекурсии при описании процедур и функций используется директива forward: