На этом шаге мы рассмотрим комбинацию прямой и обратной рекурсии.
Третью форму рекурсивных подпрограмм покажем на примере следующей задачи.
Решение этой задачи выполнено в виде показанной ниже программы Reverse_String, использующей рекурсивную процедуру Reverse. Напомним, что функция EoLn возвращает значение, равное False, если строка еще не окончилась, и значение, равное True, когда считывается последний символ строки.
program Reverse_String; procedure Reverse; var Ch : Char; begin if not EoLn then begin Read (Ch) ; Reverse; Write (Ch); end end; begin Reverse end.
Если после запуска программы на выполнение в качестве входной строки ввести слово 'HELLO', то соответствующая такой исходной строке таблица трассировки по уровням рекурсии будет иметь следующий вид:
Рис.1. Трассировка значений параметров
На следующем шаге мы рассмотрим косвенную рекурсию.