- •1.Понятие и виды информации. Единицы измерения информации.
- •2.Эвм как средство обработки информации. Структурная схема и принципы функционирования эвм.
- •3. Программное обеспечение персонального компьютера. Структура
- •4.Понятие алгоритма. Способы задания алгоритмов.
- •5.Структура программы на Турбо Паскаль
- •6.Понятие типа данных в Турбо Паскаль
- •7.Целый тип.
- •11.Приоритет операций
- •13.Условный оператор.
- •Оператор условного перехода
- •Основные математические функции
- •14.Оператор перехода. Метки и операторы перехода
- •15. Вход-выход. Ввод данных
- •Вывод данных
- •16.Оператор варианта.
- •17.Ограниченный тип.
- •18.Перечисляемый тип.
- •19.Оператор цикла с параметром for. Циклы
- •Арифметические циклы
- •Итерационные циклы с предусловием
- •20.Оператор цикла с постусловием. Циклы
- •Итерационные циклы с постусловием
- •21.Оператор цикла с предусловием.
- •Итерационные циклы с предусловием
- •22.Точность вычислений.
- •23.Одмерномерный массив. Массивы
- •24.Многомерный массив.
- •25.Строковый тип. Строковый тип данных
- •Процедуры и функции для работы со строками
- •26.Внешний файл.
- •Особенности обработки текстовых файлов.
- •27.Операции над файлами.
- •28.Множественный тип.
- •29. Подпрограммы Процедуры и функции
- •Локальные и глобальные идентификаторы
- •30,31.Механизм подпрограмм. Описание и вызов процедур и функций
- •32.Рекскурсия
- •33.Модуль.
32.Рекскурсия
Рекурсия - это способ организации вычислительного процесса, при котором процедура или функция в процессе выполнения входящих в ее состав операторов обращается сама к себе непосредственно, либо через другие процедуры и функции.
Рекурсия может быть прямой или косвенной. При прямой рекурсии оператор вызова подпрограммы содержится непосредственно в ее исполняемой части. Любую рекурсивную процедуру (функцию) можно сделать не рекурсивной. Рекурсивное описание обычно короче и нагляд-нее, но требует больших затрат машинного времени (за счет повторных обращений) и памяти машины (за счет дублирования переменных) . Рекурсивная подпрограмма однократно вызывается извне. Условие полного окончания работы рекурсивной процедуры или функции должно находиться в ней самой.
Рассмотрим пример. Вычислить значение F=M! Рекурсивное определение значение факториала можно записать следующим образом:
при М=1 F=1 при М> 1 F= M!= M*(M-1)!, т.е. М! определяется через (М-1)! |
a) Рекурсивная функция
PROGRAM MAIN; VAR M: INTEGER;
FUNCTION FACT (N:INTEGER): REAL; BEGIN
END; BEGIN
END. |
b) Рекурсивная процедура
PROGRAM MAIN; VAR M: INTEGER;
PROCEDURE FACT(N:INTEGER; VAR F: REAL); VAR Q : REAL; BEGIN
END; BEGIN
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 |
