
- •17. Проаналізувати роботу алгоритму лінійного пошуку в одномірному масиві.
- •19. Проаналізувати роботу алгоритму сортування обмінами "бульбашки".
- •I,j : Integer;
- •X : Item;
- •I,j,k: integer;
- •X: Item;
- •22. Навести визначення та властивості евристичних алгоритмів.
- •23. Навести опис евристичних алгоритмів для рішення задачі про упакування.
- •24. Навести опис, рекурсивно-визначені процедури і функції.
- •25. Навести опис складної рекурсії.
- •28. Навести визначення та способи зображення дерев.
- •29. Навести опис впорядкованого та бінарного дерева.
- •30.Навести алгоритм прямого порядку (preorder) обходу дерева.
- •31.Навести алгоритм зворотного порядоку (postorder) обходу дерева.
- •32. Навести алгоритм обходу дерева в кінцевому порядку.
- •35. Розкрити алгоритм пошуку у глибину (dfs).
- •36. Розкрити алгоритм пошуку у ширину.
- •37. Навести визначення, кістякове дерево зв'язаного неорієнтованого графа.
- •38. Сформулювати завдання про знаходження мінімального кістякового дерева
- •39. Розкрити алгоритм Краскала.
- •40. Проаналізувати роботу алгоритму Дейкстри.
- •41.Розкрити алгоритм флойда.
- •42.Навести метод розгалужень і меж
24. Навести опис, рекурсивно-визначені процедури і функції.
Описання процедури А, в розділі операторів якої використовується оператор цієї процедури, називається рекурсивним. Таким чином, рекурсивне описання має вид
Procedure A(u, v : ParType);
...
Begin
...; A(x, y); ...
End;
Аналогічно, описання функції F, в розділі операторів якої використовується виклик функції F, називається рекурсивним. Рекурсивне описання функції має вид
Function F(u, v : ArgType) : FunType;
...
Begin
...; z := g(F(x, y)); ...
End;
Використання рекурсивного описання процедури (функції) приводить до рекурсивного виконання цієї процедури (обчислення цієї функції). Задачі, що формулюються природним чином як рекурсивні, часто приводять до рекурсивних розв’язків.
Рекурсією називається така ситуація, коли підпрограма (процедура або функція) викликає сама себе.
Типова конструкція рекурсивної процедури повинна мати наступний вигляд:
Procedure Rec (t:integer);
Begin
<Дії на початку рекурсії>
If <Перевірка умови> Then Rec(t+1);
<Дії на виході з рекурсії>
End;
25. Навести опис складної рекурсії.
Складна рекурсія – виклик декількох підпрограм в одній підпрограмі.
procedure Ei(m:integer; var E:real );
var k: integer;
w: real;
begin
fact(i, fac);
for k:=1 to m do
w:=w+(exp(-1*ln(k+1))/exp((2*k-1)*ln(19)));
E:=(exp(22*ln(2))*2*fac)*w/(exp(21*ln(pi)));
end;
26. Проаналізувати роботу циклу за допомогою рукерсії. Розглянемо рекурсивне визначення функції n!=1*2*...*n (n-факторіал). Нехай F(n) = n! Тоді
1.F(0) = 1
2.F(n) = n*F(n - 1) при n > 0
Засобами мови це визначення можна сформулювати як обчислення:
If n = 0
then F := 1
else F := F(n - 1) * n
Оформивши це обчислення як функцію і змінивши ім’я, отримаємо:
Function Fact(n: Integer): Integer;
Begin
If n = 0
then Fact := 1
else Fact := Fact(n - 1) * n
End;
Обчислення функції Fact можна представити як ланцюжок викликів нових копій цієї функції з передачею нових значень аргументу і повернень значень функції в попередню копію.
27. Навести визначення рекурентні співвідношення. Рекурсія і ітерація. Рекурентним співвідношенням називається формула виду an+1=F(an,an-1,...,an-k+1), де F деяка функція від k аргументів, яка дозволяє обчислювати наступні члени послідовності через значення попередніх членів. Якщо вказати перших k членів послідовності, то рекурентне співвідношення однозначно визначає послідовність an.
Рекурсией называется такой способ организации обработки данных, при котором программа (или функция) вызывает сама себя или непосредственно, или из других программ (функций).
Функция называется рекурсивной, если во время ее обработки возникает ее повторный вызов, либо непосредственно, либо косвенно, путем цепочки вызовов других функций. Итерацией называется такой способ организации обработки данных, при котором некоторые действия многократно повторяются, не приводя при этом к рекурсивным вызовам программ (функций).
Теорема. Произвольный алгоритм, реализованный в рекурсивной форме, может быть переписан в итерационной форме и наоборот.
Далее рассмотрим набор элементарных функций, реализованных как при помощи операторов цикла, так и при помощи рекурсивного подхода. Перед написанием рекурсивных функций на любом языке программирования, как правило, необходимо записать рекуррентное соотношение, определяющее метод вычисления функций. Рекуррентное соотношение должно содержать как минимум два условия:
I) условие продолжения рекурсии (шаг рекурсии);
II) условие окончания рекурсии.
Рекурсию будем реализовывать посредством вызова функции самой себя. При этом в теле функции сначала следует проверять условие продолжения рекурсии. Если оно истинно, то выходим из функции. Иначе совершаем рекурсивный шаг.
Итеративный вариант функций нужно реализовывать при помощи оператора цикла for.