Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпаргалки.doc
Скачиваний:
123
Добавлен:
04.06.2014
Размер:
306 Кб
Скачать

32.Рекскурсия

Рекурсия - это способ организации вычислительного процесса, при котором процедура или функция в процессе выполнения входящих в ее состав операторов обращается сама к себе непосредственно, либо через другие процедуры и функции.

Рекурсия может быть прямой или косвенной. При прямой рекурсии оператор вызова подпрограммы содержится непосредственно в ее исполняемой части. Любую рекурсивную процедуру (функцию) можно сделать не рекурсивной. Рекурсивное описание обычно короче и нагляд-нее, но требует больших затрат машинного времени (за счет повторных обращений) и памяти машины (за счет дублирования переменных) . Рекурсивная подпрограмма однократно вызывается извне. Условие полного окончания работы рекурсивной процедуры или функции должно находиться в ней самой.

Рассмотрим пример. Вычислить значение F=M! Рекурсивное определение значение факториала можно записать следующим образом:

при М=1 F=1 при М> 1 F= M!= M*(M-1)!, т.е. М! определяется через (М-1)!

a) Рекурсивная функция

PROGRAM MAIN; VAR M: INTEGER;

F:REAL;

FUNCTION FACT (N:INTEGER): REAL; BEGIN

IF N=1 THEN

FACT:=1

ELSE

FACT:= N* FACT(N-1);

END; BEGIN

READLN(M); F:= FACT ( M ); WRITELN (' M!=', F);

END.

b) Рекурсивная процедура

PROGRAM MAIN; VAR M: INTEGER;

F:REAL;

PROCEDURE FACT(N:INTEGER; VAR F: REAL); VAR Q : REAL; BEGIN

IF N=1 THEN Q:=1

ELSE FACT(N-1,Q);

F:=N*Q;

END; BEGIN

READLN(M); FACT ( M, F ); WRITELN (' M!=', F);

END.

B варианте а) при м=4 выполняются следующие действия:

FACT:=4*FACT(3); FACT:=3*FACT(2); FACT:=2*FACT(1); FACT(1):=1.

При входе в функцию в первый раз отводится память под локальную переменную, соответствующую параметру-значению; ей присваивается значение фактического параметра (М). При каждом новом обращении строятся новые локальные переменные. Так как FACT(1)=1, то выполнение функции заканчивается. После этого выполняются действия:

FACT(1):=1; FACT:=2*FACT(1); FACT(2):=2; FACT:=3*FACT(2); FACT(3):=3*2=6; FACT:=4*FACT(3); т.е. FACT=24

Соседние файлы в предмете Информатика