Рекурсия
Рекурсия – это
такой способ организации вычислительного
процесса, при котором подпрограмма в
ходе выполнения составляющих ее
операторов обращается сама к себе.
При выполнении
правильно организованной рекурсивной
подпрограммы осуществляется многократный
переход от некоторого текущего уровня
организации алгоритма к нижнему уровню
последовательно, до тех пор, пока,
наконец, не будет получено тривиальное
решение поставленной задачи. ( При
N=0решение тривиально и используется
для остановки рекурсии).
PROGRAM OFACT;
{$$+} {}
VAR n: INTEGER;
FUNCTION FACT(n: INTEGER):
REAL;
{}
begin{ FACT}
IF n<0 THEN WRITELN (‘n’)
ELSE IF n=0 THEN FACT:= 1
ELSE FACT:= n* FACT(n-1);
end{FACT};
{ _ _ _ _}
BEGIN {main}
REPEAT
READLN (n);
WRITELN(‘n!=’, FACT(n));
UNTIL
EOF;
END.
Рекурсивный вызов
может быть косвенным. В этом случае
подпрограмма обращается к себе
опосредованно, путем вызова другой
подпрограммы, в которой содержится
обращение к первой.
1осн.[161-181]
5Доп. [16-19], 10доп.[104-116], 11доп.[187-211], 12доп.[121-134]
Контрольные
вопросы
1. Могут ли имена
формальных и фактических параметров
подпрограмм совпадать между собой?
Будет ли видима
глобальная переменная внутри подпрограммы,
если в этой подпрограмме имеется
локальная переменная с таким же именем?
Возможна ли
передача управления внутрь процедуры
(функции) посредством оператора перехода
goto
и почему?
В чем состоит
отличие описания процедуры и функции?
Что такое область
действия идентификаторов?
Какие параметры
называются формальными и какие -
фактическими?
Каковы правила
передачи параметров-значений и
параметров-переменных?
Что необходимо
для реализации рекурсии в программе?