Презентація на тему «Рекурсія»


252



Слайд #1


Рекурсія
Презентація на тему «Рекурсія» - Слайд #1

Слайд #2


Програми можуть містити виклик однієї або декількох підпрограм. Підпрограми можуть, в свою чергу, викликати інші підпрограми.
А чи може підпрограма викликати саму себе?
Презентація на тему «Рекурсія» - Слайд #2

Слайд #3


Алгоритмічна конструкція, в якій підпрограма викликає сама себе, називається рекурсією.
Рекурсивні алгоритми зазвичай виникають там, де вихідну задачу можна звести до такої ж самої, але з іншими аргументами або в інших обставинах.
Презентація на тему «Рекурсія» - Слайд #3

Слайд #4


В житті ми маємо такі випадки, коли будь-яке поняття визначається з використанням того ж самого поняття (рекурсія):
цукерка "Ану-ка отними" має на фантику зображення цукерки, яка має зображення цукерки і так далі;
всім відома російська приказка "У попа была собака…";
луна в горах.
Презентація на тему «Рекурсія» - Слайд #4

Слайд #5


Рекурсія дає змогу записувати циклічні алгоритми без використання команд циклу. Розглянемо приклади запису рекурсивних алгоритмів.
Презентація на тему «Рекурсія» - Слайд #5

Слайд #6


Обчислення факторіалу числа: n!=1*2*3*…*n
1)Звичайний спосіб:
Fact:=1; for i:=1 to n do Fact=Fact * і ;
2) Рекурсивний спосіб:
n!= 1, при n=0 (0!=1,1!=1 за визначенням) ;
(n-1)!* n , при n>0.
Текст функції:
Function Fact( n : integer) : integer;
begin
If n=0 then Fact:=1 else Fact:= Fact(n-1) * n
end;
Презентація на тему «Рекурсія» - Слайд #6

Слайд #7


cтек
Рекурсивний виклик функції
oбчислення n!
локальні дані
Презентація на тему «Рекурсія» - Слайд #7

Слайд #8


cтек
Виконання відкладених викликів функції
Презентація на тему «Рекурсія» - Слайд #8

Слайд #9


Виконання комп'ютером відкладених викликів функції можливе завдяки використанню стекa. Стек – модель оперативної пам'яті, де дані запам'ятовуються і зберігаються за принципом "перший прийшов – останнім вийшов" (аналогом стеку є ріжок для набоїв у автоматі).
Презентація на тему «Рекурсія» - Слайд #9

Слайд #10


Обчислення суми чисел від a до b з кроком 1
1)Звичайний спосіб:
s:=0; for i:=a to b do s:=s+і;
2)Рекурсивний спосіб:
Function Summa (a, b:integer):integer;
begin
If a=b then Summa :=a
else Summa := Summa (a, b-1)+b
еnd;
Презентація на тему «Рекурсія» - Слайд #10

Слайд #11


Обчислення степеня з натуральним показником хк
1)Звичайний спосіб:
р:=1; for i:=1 to к do р=р*х ;
2)Рекурсивний спосіб:
1, при к = 0;
Хк=
хк-1, при к > 0.
Function Power( k : integer; x : real) : integer;
begin
If k=0 then Power:=1
else Power:=Power(k-1, x) * х
end;
Презентація на тему «Рекурсія» - Слайд #11

Слайд #12


Обчислення чисел ФібоначчіFk= Fk-1 + Fk-2 , F1= F2=1
1)Звичайний спосіб:
x:=1; z:=1; {-перші два числа Фібоначчі }
for i:=1 to k do begin y:=x; x:=z; z:=x+y;
write (z:5) end;
2)Рекурсивний спосіб:
Function Fib (k:integer):integer;
begin
If k<3 then Fib :=1
else Fib := Fib (k-1)+Fib(k-2) end;
Презентація на тему «Рекурсія» - Слайд #12

Слайд #13


Переваги використання рекурсії:
рекурсивний алгоритм коротший і наглядніший.
Недоліки:
обчислення рекурсивного алгоритму на компютері потребує більше часу (за рахунок повторних звертань до підпрограми) і пам'яті (за рахунок дублювання локальних змінних підпрограми).
Презентація на тему «Рекурсія» - Слайд #13

Слайд #14


Обчислення 15-го числа ФібоначчіFk= Fk-1+ Fk-2 (рекурсивний спосіб)
F15
F14 F13
F13 F12 F12 F11
F12 F11 F13 F12 F11 F10 F10 F9
F11 F10 . . . . . . . . . . . . . . . . . . . . F8 F7
F9 F8 .. . . . . . . . . . . . . . . . F7 F6
Презентація на тему «Рекурсія» - Слайд #14

Слайд #15


Увага!
При обчисленні 31-го числа Фібоначчі рекурсивним способом комп'ютер виконає >1 млн. операцій додавання,
45-го > 1 млрд.!!! (що може призвести до переповнення стеку).
Для порівняння:
обчислення за звичайним способом потребує 31 та 45 операцій додавання відповідно!
Презентація на тему «Рекурсія» - Слайд #15

Слайд #16


Задача про Ханойські вежі.
Потрібно перекласти диски з осі А на вісь С, користуючись віссю В так, щоб більший диск не класти на менший. За один раз можна перекладати один диск.
А
В
С
Презентація на тему «Рекурсія» - Слайд #16

Слайд #17


Програма
procedure Xanoj(n : integer; A,B,C: char); begin
If n=1 then writeln(‘перекласти диск з осі', A, 'на вісь', C)
else begin
Xanoj(n-1, A, B, C);
writeln(‘перекласти диск з осі', A, 'на вісь', C)
Xanoj(n-1, B, C, A);
end end; {кінець процедури}
Var n: integer ;
begin writeln(‘задайте кількість дисків'); readln(n);
Xanoj(n,'A','B','C') end. {кінець головної програми}
Презентація на тему «Рекурсія» - Слайд #17

Слайд #18


A
B
c
Виконання рекурсивної процедури для перекладання трьох дисків
Презентація на тему «Рекурсія» - Слайд #18

Слайд #19


Дякуємо за увагу!
Презентація на тему «Рекурсія» - Слайд #19