КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Понятие рекурсии. Рекурсивные процедуры и функции, их применение, достоинства и недостатки
Сравнительный анализ возможностей процедуры и функции. Возможности преобразования процедуры в функцию и наоборот Процедура - это поименованное сложное действие, которое представляет собой совокупность операторов, вычисляющих некоторое число результатов в зависимости от некоторого числа аргументов. Синтаксис заголовка процедуры: PROCEDURE < имя процедуры > [( <список формальных параметров > )]; Функция предназначена для вычисления какого-либо одного значения и используется в выражениях аналогично стандартным функциям. Синтаксис заголовка функции: FUNCTION < имя функции >[(<список формальных параметров>)]: <тип результата>; Размещение: Процедура или функция (общее название - подпрограмма) определяется в разделе описаний основной программы или другой процедуры(функции). Процедура(функция) имеет ту же структуру, что и основная программа, т.е. состоит из заголовка, описательной части и выполняемой части. Отличие описания функции от процедуры: · результатом обращения к функции может быть одно единственное значение; · идентификатор результата не указывается в списке формальных параметров; · в выполняемой части функции, хотя бы один раз, имени функции должно быть присвоено значение результата (чаще всего перед выходом из функции); · после списка формальных параметров задается тип результата; · после обращения к функции управление передается на выполнение следующей операции данного выражения (в соответствии с приоритетом).
Преобразование процедуры в функцию: Только если на выходе процедуры 1 результат PROCEDURE P1 (A,B,C: Integer; VAR Sum: Integer) Begin Sum:=A+B+C; End; Преобразование функции в процедуру: ВОЗМОЖНО ВСЕГДА Рекурсия - это способ организации вычислительного процесса, при котором процедура или функция в процессе выполнения входящих в ее состав операторов обращается сама к себе непосредственно, либо через другие процедуры и функции. Рекурсия может быть прямой или косвенной. При прямой рекурсии оператор вызова подпрограммы содержится непосредственно в ее исполняемой части. Любую рекурсивную процедуру (функцию) можно сделать не рекурсивной. Рекурсивное описание обычно короче и нагляднее, но требует больших затрат машинного времени (за счет повторных обращений) и памяти машины (за счет дублирования переменных). Рекурсивная подпрограмма однократно вызывается извне. Условие полного окончания работы рекурсивной процедуры или функции должно находиться в ней самой. Рассмотрим пример. Вычислить значение 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.
Дата добавления: 2015-04-24; Просмотров: 2252; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |