- •СОДЕРЖАНИЕ
- •1.1. Как строится график с помощью компонента TChart
- •1.3. Пример написания программы
- •1.3.2. Работа с компонентом TChart
- •1.4. Выполнение индивидуального задания
- •2.1. Понятие рекурсии
- •2.2. Порядок выполнения работы
- •2.2.1. Пример рекурсивной и нерекурсивной подпрограммы
- •3.1. Задача оптимального выбора и дерево решений
- •3.2. Рекурсивные процедуры полного перебора игрового дерева
- •3.4. Эвристические методы
- •ТЕМА 4. ПОИСК И СОРТИРОВКА МАССИВОВ
- •4.4. Индивидуальные задания
- •5.1. Определение стека
- •5.3.Индивидуальные задания
- •6.1. Очередь на основе односвязанного списка
- •6.4. Индивидуальные задания
- •7.1. Задача вычисления арифметических выражений
- •7.2. Порядок написания программы
- •7.3. Индивидуальные задания
- •8.1. Понятие древовидной структуры
- •8.2. Компонент TTreeView
- •8.3. Бинарное дерево поиска
- •8.4. Основные операции с двоичным деревом поиска
- •8.5. Порядок написания программы
- •8.6. Индивидуальные задания
- •ТЕМА 9. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
- •9.1. Понятие объекта и класса
- •9.2. Создание и уничтожение объектов
- •9.3. Наследование и полиморфизм
- •9.4. Пример написания программы
- •9.5. Варианты заданий
- •10.2. Хеш-таблица на основе массива связанных списков
- •10.3. Индивидуальные задания
- •ЛИТЕРАТУРА
ТЕМА 2. ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ РЕКУРСИИ
Цель лабораторной работы: изучить способы программирования алго- ритмов с использованием рекурсии.
2.1. Понятие рекурсии |
Р |
|
И |
Рекурсия – это такой способ организации вычислительного процесса, при котором подпрограмма в ходе выполнения составляющих ее операторов обраща-
ется сама к себе. Классический пример программирования вычисления n-го члена |
||||
(n>0) рекуррентной последовательности xn=ϕ (xn-1) при x0=a: |
||||
|
|
|
Г |
|
double XR(int n) |
|
Б |
У |
|
{ |
|
|
|
|
if (n==0) return a; |
// Условие окончания рекурсии |
|||
|
|
а |
|
|
else return ϕ(XR(n-1)); // Рекурсивное обращение к функции |
||||
} |
внюедовательнопосл |
|
|
|
ции алгоритма к нижнему |
, до тех пор пока наконец не |
|||
Здесь ϕ - функция, определяющая за он р |
уррентности. |
|
||
При выполнении правильно организованнойк |
рекурсивной подпрограммы |
|||
|
т |
|
|
|
осуществляется многократный п р ход от некоторого текущего уровня организа- |
будет получено тривиальн е решение задачи (в вышеприведенном примере n=0). Рекурсивная форма записи алгоритма обычно выглядит изящнее итераци-
ются в тех случаях, когда в структуре решаемой задачи рекурсия присутствует явноБ.
онной и дает более компактный текст программы, но при выполнении, как прави- |
||||
|
|
|
уро |
|
ло, медленнее и может вызвать переполнение программного стека. Это вызвано |
||||
тем, что при актива |
каждого экземпляра вложенной подпрограммы порожда- |
|||
|
|
ции |
|
|
ется новое множество |
окальных переменных и, кроме того, запоминается теку- |
|||
щее состоя |
ленийвычис |
. Поэтому рекурсивные алгоритмы обычно использу- |
||
б |
|
|
|
|
ние |
|
|
|
|
Рекурс вный вызов может быть прямым, как в вышеприведенном примере, и косвенным. В этом случае подпрограмма обращается к себе опосредованно, пу- тем вызова другой подпрограммы, в которой содержится обращение к первой. Косвенный вызов может быть явно не виден в тексте программы, поэтому его ис- пользование без необходимости нежелательно.
PDF created with pdfFactory Pro trial version www.pdffactory.com