
- •Теоретический раздел лекции Тема 1. Программирование с использованием рекурсии
- •1.1. Cтратегии решения задачи разбиением ее на подзадачи
- •1.2. Программирование рекуррентных соотношений
- •Var z:extended;
- •1.3. Условия окончания рекурсии
- •1.4. О целесообразности использования рекурсии
- •Var I,X,y,z:word;
- •1.5 Правила выбора программной реализации рекуррентных соотношений
- •Тема 2. Задачи перебора вариантов
- •2.1. Модель дерева решений
- •2.2. Задача оптимального выбора (задача о рюкзаке)
- •2.3. Метод полного перебора двоичного дерева
- •Var wt,ct:extended;
- •Var j,k:byte;
- •If k in s then begin
- •Var j:byte;
- •Var j:byte;
- •Var wt1,oct1:byte;
- •2.4. Метод ветвей и границ
- •Var n,I:byte;
- •Var wt1,oct1:Extended;
- •Include(s,I);
- •If I in Sopt then writeln(I,a[I].W,a[I].C);
- •2.5. Эвристические методы
- •Тема 3. Поиск и сортировка массивов записей
- •3.1. Применимость сортировки и поиска
- •3.2. Массив записей и поиск в нем
- •Var m:word;
- •3.3. Сортировки массивов
- •Var c: mas; I,j,k:word;
- •Var m:word;
- •Var I,j:Word;
- •Var I,j,l,r:Word; X:Tk; w:Tzp;
- •Тема 4. Связанные списки с использованием рекурсивных данных
- •4.1. Список, стек, очередь
- •4.2. Списки на основе динамических массивов
- •Inherited create;
- •Var turn:Tlist; с1,c2:Tinf;
- •4.3. Рекурсивные данные и однонаправленные списки
- •Inherited create;
- •Var stec,st1,turn,tr1:Tlist; inf:Tinf;
- •4.4. Начальное формирование, добавление и удаление элементов однонаправленного списка
- •4.5. Разновидности связанных списков
- •Inf:Tinf;
- •Тема 5. Поиск и сортировки на связанных линейных списках
- •5.1. Поиск в однонаправленных списках
- •5.2. Сортировка однонаправленных списков
- •1 3Var Inf:tInf;
- •Тема 6. Использование линейных связанных списков
- •6.1. Вычисления арифметических выражений
- •Var ch,ch1,ch2,chr:char;
- •I:byte;ch,ch1:char;
- •6.2. Сложение больших целых чисел
- •Var u,V,s,t:byte;
- •6.3. Работа с разреженными матрицами
- •Inf:Tinf;
- •Inf:tInf;
- •Var proot,p:Ptree;
- •Var bl:boolean;
- •7.2. Бинарное дерево поиска
- •7.3. Основные операции с бинарным деревом поиска
- •Inf:tInf;
- •Var d1:Tree; c:Tinf; k:Tkey;
- •Var bl:Boolean;
- •Var m:Word;
- •Var p:Ttree; m:Word;
- •Тема 8. Хеширование
- •8.1. Что такое хеширование
- •8.2. Схема хеширования
- •Interface
- •Inf:Tinf;
- •8.4. Другие способы хеширования
- •Практический раздел Указания по выбору варианта
- •Индивидуальные практические работы и контрольные работы
- •Индивидуальная практическая работа №1. Программирование с использованием рекурсии
- •1.1. Понятие рекурсии
- •1.2. Порядок выполнения работы
- •1.2.1. Пример решения задачи
- •Индивидуальная практическая работа №2. Организация однонаправленного списка на основе рекурсивных типов данных в виде стека
- •2.1. Основные понятия и определения
- •Inf:tInf; // информация
- •Контрольная работа №1. Программирование с использованием деревьев на основе рекурсивных типов данных
- •1.1. Понятие древовидной структуры
- •Inf:tInf;
- •1.2. Компонент tTreeView
- •1.3. Бинарное дерево поиска
- •Основные операции с двоичным деревом поиска
- •1.4. Порядок написания программы
- •Inf:tInf;
- •Inherited Free;
- •Var tr:Ttree;
- •1.5. Индивидуальные задания
- •Курсовая работа
- •Литература
Индивидуальные практические работы и контрольные работы
Таблица 1
последние цифры № зач.книжки |
№ контр. задания и варианта |
последние цифры № зач.книжки |
№ контр. задания и варианта |
01 |
1 |
41 |
4 |
02 |
2 |
42 |
5 |
03 |
3 |
43 |
6 |
04 |
4 |
44 |
7 |
05 |
5 |
45 |
8 |
06 |
6 |
46 |
9 |
07 |
7 |
47 |
10 |
08 |
8 |
48 |
11 |
09 |
9 |
49 |
12 |
10 |
10 |
50 |
13 |
11 |
11 |
51 |
14 |
12 |
12 |
52 |
15 |
13 |
13 |
53 |
1 |
14 |
14 |
54 |
2 |
15 |
15 |
55 |
3 |
16 |
1 |
56 |
4 |
17 |
2 |
57 |
5 |
18 |
3 |
58 |
6 |
19 |
4 |
59 |
7 |
20 |
5 |
60 |
8 |
21 |
6 |
61 |
9 |
22 |
7 |
62 |
10 |
23 |
8 |
63 |
11 |
24 |
9 |
64 |
12 |
25 |
10 |
65 |
13 |
26 |
11 |
66 |
14 |
27 |
12 |
67 |
15 |
28 |
13 |
68 |
1 |
29 |
14 |
69 |
2 |
30 |
15 |
70 |
3 |
31 |
1 |
71 |
4 |
32 |
2 |
72 |
5 |
33 |
3 |
73 |
6 |
34 |
7-4 |
74 |
8-3 |
35 |
8-4 |
75 |
9-3 |
36 |
9-4 |
76 |
1-4 |
37 |
1-5 |
77 |
2-4 |
38 |
2-5 |
78 |
3-4 |
39 |
3-5 |
79 |
4-4 |
40 |
4-5 |
80 |
5-4 |
Индивидуальная практическая работа №1. Программирование с использованием рекурсии
Цель лабораторной работы: изучить способы программирования алгоритмов с использованием рекурсии
1.1. Понятие рекурсии
рекурсия – это такой способ организации вычислительного процесса, при котором подпрограмма в ходе выполнения составляющих ее операторов обращается сама к себе. Классический пример программирования вычисления n-го члена (n>0) рекуррентной последовательности xn= (xn-1) при x0=a
...
Function XR(n:Word):extended;
begin
if n=0 then XR:=a
else XR:=(XR(n-1));
end;
Здесь функция, определяющая закон рекуррентности и определяемая в общем случае как:
Function Fi(x:extended):extended;
begin Result:= XR(n-1)+b/XR(n-1))/2 end;
или явно, например, как
XR:=(XR(n-1)+b/XR(n-1))/2.
Обращение: a:=a0; b:=b0; y:=XR(n0);
При выполнении вышеприведенной рекурсивной подпрограммы осуществляется многократный переход от некоторого текущего уровня организации алгоритма к нижнему уровню последовательно, до тех пор, пока наконец не будет получено тривиальное решение задачи (в вышеприведенном примере n=0).
Рекурсивная форма записи алгоритма обычно выглядит изящнее итерационной и дает более компактный текст программы, но при выполнении, как правило, медленнее и может вызвать переполнение программного стека.
Рекурсивный вызов может быть прямым, как в вышеприведенном примере, и косвенным. В этом случае подпрограмма обращается к себе опосредованно, путем вызова другой подпрограммы, в которой содержится обращение к первой.