- •Використання рекурсивних алгоритмів. Розв’язування задач.
- •Хід уроку
- •1. Перевірка домашнього завдання.
- •2. Актуалізація опорних знань.
- •Var n: Integer;
- •Що виведе на екран програма ?
- •Var n: Integer;
- •3. Мотивація.
- •Var X, y, z : char;
- •Var і, к, j : integer;
- •4. Вивчення нового матеріалу.
- •Var n, і : Integer;
- •Var м, n : Integer;
- •5. Створення та реалізація програми
- •6. Підсумки уроку.
- •Var s, а, в, d: Integer;
- •Var s, a, n, d: Integer;
- •7. Домашнє завдання.
- •Var s : String;
- •Var s : String;
- •Var s : String;
- •8. Підготуватися до тематичного оцінювання з теми «Функції та процедури».
6. Підсумки уроку.
Задано рекурсивний алгоритм для деякої функції:
Function X1 (A, В : Integer): Integer:
Begin
If A>B Then X1:=0
Else X1:=A+X1(A+1,B);
End;
а) Яку функцію (обчислення) реалізує даний алгоритм?
б) Запишіть відповідну до даного алгоритму рекурсивну функцію.
в) Чи можна команду присвоєння, яка стоїть після службового слова Else, записати так:
Х1:=В+Х1(А,В-1),
залишивши все інше без змін? Чи зміниться при цьому функція алгоритму?
г) Прослідкуйте за виконанням алгоритму Х1 при звертанні S:=X1 (-11,-5).
д) Прослідкуйте за виконанням алгоритму Х1 при звертанні S:=X1(14,10).
Задано рекурсивний алгоритм для деякої функції:
Type A=Array[ 1..5] of Real;
Const В : А = (15,30,45,15,30);
Var Т: А;
і, Min, Max, N: Integer;
S:Real;
Function Х2 (К:А;І: Integer): Real;
Begin
If 1=5 Then X2:=T[l]/5
Else X2:=T[l]/5+X2(T,l+1);
End;
Begin
T:=B;
S:=X2 (T, 1);
WriteLn (’S=',S:6:2);
End.
а) Яку функцію (обчислення) реалізує даний алгоритм?
б) Запишіть відповідну до даного алгоритму рекурсивну функцію.
в) Прослідкуйте за виконанням алгоритму X. Яке значення надрукує програма?
Нехай S(a,b) - функція, яка обчислює суму парних чисел від А до В (А, В - парні числа, А<В), яку рекурсивно можна визначити так:
а) Складіть програму обчислення такої функції з використанням рекурсивної підпрограми.
б) Які зміни треба внести до цієї програми, щоб знайти суму чисел З, 9, 12, 15, 18, 21?
в) Які числа надрукує наведена програма при а=2, b=6, d=2?
г) Яким вимогам мають відповідати аргументи функції Sum?
Var s, а, в, d: Integer;
Function Sum (A,B,D: lnteger):lnteger;
Begin
If A=B Then Sum:=A
Else Begin WriteLn (B);
Sum:=B+Sum (A,B-D,D);
End
End;
Begin
ReadLn (A,B, D);
S:=Sum (A,B, D);
WriteLn (S)
End.
Що надрукує програма:
Var s, a, n, d: Integer;
Function Sum (A, N, D: Integer): Integer;
Begin
If N=1 Then Sum:=A
Else Sum:=Sum (A+D,N-1,D);
WriteLn (N:3, A:3);
End;
Begin
S:=Sum (2,3,4);
WriteLn (S);
End.
Дайте рекурсивне визначення множення як додавання.
Складіть програму для обчислення добутку двох чисел з використанням рекурсивного алгоритму.
Складіть програму для обчислення неповної частки від ділення двох чисел з використанням рекурсивного алгоритму; остачі від ділення (функції Mod, Div не застосовуйте).
Запишіть рекурсивну функцію та рекурсивний алгоритм обчислення степеня Xе для довільного дійсного X та цілого С (додатного, нульового, від'ємного) шляхом множення X на себе потрібну кількість разів.
Дана геометрична прогресія: b1=1.5, q=2. Запишіть рекурсивне визначення даної прогресії. Складіть програму обчислення n-го члена прогресії з використанням рекурсивної функції.
Складіть програму обчислення n-го члена арифметичної прогресії (а1=3, d=2) з використанням рекурсивної функції
Запишіть рекурсивну функцію та рекурсивний алгоритм обчислення найбільшого спільного дільника (на основі алгоритму Евкліда, див. п.5.1, приклад 5.7) двох натуральних чисел.
Опишіть рекурсивну функцію Root (F, a, b, Е), яка методом ділення навпіл знаходиш з точністю Е корінь рівняння F(x)=0 на відрізку [а,Ь]. Вважати, що Е>0, a<b, F(a)F(b)<0, і F(x) - безперервна та монотонна функція на відрізку [а,Ь].
