Шаг 106.
Выполнение действий как на рекурсивном спуске, так и на возврате

    На этом шаге мы рассмотрим комбинацию прямой и обратной рекурсии.

    Третью форму рекурсивных подпрограмм покажем на примере следующей задачи.


    Задача. Вывести на печать символы введенной строки 'HELLO' в обратном направлении.

    Решение этой задачи выполнено в виде показанной ниже программы 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. Трассировка значений параметров

    На следующем шаге мы рассмотрим косвенную рекурсию.




Предыдущий шаг Содержание Следующий шаг