Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентации 2часть / Лекция_18_Рекурсия .ppt
Скачиваний:
27
Добавлен:
11.05.2015
Размер:
388.1 Кб
Скачать

Примеры описания объектов с помощью рекуррентных уравнений

2. Сумма

n

 

 

S(n) ai

 

i 0

 

 

а) S(0)=a0;

 

б) S(n)=S(n-1)+an.

 

 

 

02.07.19

11

Примеры описания объектов с помощью рекуррентных уравнений

3. Числа Фиббоначи:

а) b(0)=0; b(1)=1;

б) b(n)=b(n-1)+b(n-2)

0 1 1 2 3 5 8 13…

02.07.19

12

Все выше приведенные определения являются рекурсивными, т.е. представляют объект соотношением, выражающим объект через самого себя

Таким образом рекурсивное определение

позволяет с помощью конечного высказывания определить

бесконечное множество объектов

Если N натуральное то N+1 тоже натуральное,

1 - натуральное

Аналогично с помощью конечной рекурсивной записи алгоритма можно описать бесконечное вычисление, причем запись алгоритма не будет содержать организации явных повторений.

02.07.19

13

В общем виде рекурсивный алгоритм P можно

выразить как алгоритм, состоящий из комбинации последовательности действий S и самого P:

P = S (a,b,…, P).

На каждом шаге n комбинация

Pn = S (an-1,bn-1,…, Pn-1).

представляет элементарную задачу в

предположении, что an-1,bn-1,…, Pn-1 уже вычислены.

Такое определение последовательности Pn называется индуктивным

02.07.19

14

Решать задачу рекурсивно (т.е. составить рекурсивный алгоритм)

– это значит разложить задачу на подзадачи, которые затем подобным образом (т.е. рекурсивно) разбить на еще меньшие подзадачи;

на определенном уровне подзадачи становятся настолько простыми, что могут быть решены тривиально;

когда решены все элементарные подзадачи, тогда подзадачи составленные из элементарных тоже будут выполнены.

Исходная задача окажется выполненной, когда будут выполнены все подзадачи ее образующие.

Алгоритм разбиения исходной задачи на подзадачи

записывается в виде рекуррентного соотношения.

15

02.07.19

нахождение ma=max (a1...an)

можно разбить на элементарные подзадачи в виде следующего рекуррентного соотношения

max (a1...an) = max (max (a1...an-1), an),

max (a1...an-1) = max (max (a1...an-2), an-1),…

. . . .

max (a1,a2) = max (max (a1), a2)

02.07.19

16

нахождение ma=max (a1...an)

Каждая элементарная подзадача

ma=max (х,у)

решается выбором

if x>y then ma=x else ma=y.

На последнем уровне окажется тривиальная

задача: ma = max (a1) = a1,

затем находится ma = max (ma, a2) и т.д.

02.07.19

17

нахождение ma=max (a1...an)

Можно разбиение на подзадачи организовать по другому:

max (a1...an) =

= max (max (a1...an/2), max (an/2+1...an) )

Упражнение:

Проверьте, как будет эффективней

02.07.19

18

нахождение ma=max (a1...an)

Мах( 5 4 3 8 7 2 1)

(5 4 3)

(8 7 2 1)

(5) (4 3)

(8 7) (2 1) элементарные

(5 4)

(8 2)

(5 8)

 

8

 

Решается 6 элементарных неповторяющихся подзадач!

02.07.19

19

Вычисление n-го числа Фиббоначи

Разбиение

F(0)=0; F(1)=1

 

F(n)=F(n-1)+F(n-2);

 

4 (3)

5(5)

 

3(2)

 

 

 

 

 

3(2)

2(1)

2(1)

1(1)

2(1)

1(1)

1(1)

0(0)

1(1)

0(0)

 

1(1) 0(0)

 

 

 

 

 

 

Происходит разбиение на зависимые подзадачи

В результате приходится повторно решать

одни и те же подзадачи

20

02.07.19