Косвенная рекурсия

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: