Л.Р._Ш.И_2-6 / L4_Recur
.docЛАБОРАТОРНАЯ РАБОТА "Вычисления методом рекурсии"
ЦЕЛЬ РАБОТЫ
Изучение Рекурсивных методов вычисления выражений:
- решение задачи о размещениях;
- вычисление рядов;
- вычисление чисел Фибоначчи;
- вычисление методом хвостовой рекурсии;
- выполнение индивидуального задания.
Общие сведения
-
Способ решения задачи состоит в том, чтобы разбить исходную задачу на более мелкие подзадачи, решить их, а затем объединить подзадачи для того, чтобы получить решение исходной задачи.
-
Рис.1.
Если подзадача есть уменьшённым вариантом исходной задачи, то способ её разбиения и решения идентичен способу, применённому к исходной задаче. Такой процесс называется рекурсией.
-
В качестве примера рассмотрим родственные отношения, а именно отношение – «Предок». Если разбить эту задачу на подзадачи, то самой простой и искомой решённой подзадачей есть:
Предок(x, z): - Родитель(x, z). Смотри рис.2.
Предок(x, z):- Предок(x, z):- Предок(x, z):- Предок(x, z):-Родитель(x,y1), Родитель(x,y1), Родитель(x,y), Родитель(x,z).
Родитель(y1,y2), Родитель(y1,y2), Родитель(y,z).
Родитель(y2,y3), Родитель(y2,z).
Родитель(y3,z).
Рис.2.
… Предок(x, z):- Предок(x, z):- Предок(x, z):-
Родитель(x,y), Родитель(x,y), Родитель(x,z).
Предок(y, z). Предок(y, z).
-
Решение задачи состоит из фазы разбиения и фазы решения.
1 фаза: задача разбивается до тех пор, пока последняя подзадача не станет достаточно примитивной с известным решением
.
II фаза: выполняется решение более сложной задачи на основе наглядности решения простой подзадачи.
Восходящая стратегия (хвостовая рекурсия).
f(N,S): - f(N,S,N0,S0)
Для указания на «размер» Для записи
решённой к настоящему промежуточного решения
времени задачи (счётчик)
Два дополнительных параметра
Цель работы.
Нахождение суммы числового ряда методом рекурсии и вывод результатов в два окна.
Порядок выполнения работы.
-
Загрузить компилятор языка логического программирования PROLOG.
-
Составить и отладить программу вычисления суммы числового ряда методом общей и хвостовой рекурсии.
(Sum = 1+2+3+4+…+n–сумма числового ряда)
Общая |
Хвостовая |
Sum(0,0). Sum(N,S): - N1 = N –1, Sum(N1,S1), S = S1+N, N1>=0. |
Sum(N,S): - Sm(N,S,1,0). Sm(N,S,N0,S0): - N0 <= N, N1=N0 + 1, S1= N0 + S0, Sm(N,S,N1,S1). Sum(_,S,_,S). |
Ключевым моментом есть использование самого предиката Sum (общая, а Sm - хвостовая) в его определении. Такие определения и называются РЕКУРСИВНЫМИ.
-
Вывести результаты в окна.
В первое окно выводиться таблица сумм для 1, 2, …. 5 чисел числового ряда.
Во второе окно число N вводится с клавиатуры, после чего в окно выводится сумма числового ряда, состоящая из N количества чисел.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Составить и отладить программу вычисления числа перестановок из n объектов
predicates
fact(integer, integer)
clauses
fact(1, 1).
fact(N, P):-N1=N-1, fact(N1, P1), P=P1*N.
2. Составить и отладить программу вычисления суммы N натуральных чисел
3. Составить и отладить программу вычисления n-того числа Фибоначчи
predicates
fib(integer, integer)
clauses
fib(1, 1).
fib(2, 1).
fact(N, F) :- N1=N-1, N2=N-2, fib(N1, F1), fib(N2,F2), F =F1 + F2.
4. Составить и отладить программу вычисления предыдущих задач методом хвостовой рекурсии
predicates
clauses
f(N, R) :- fv(N, R, 1, 0).
fv(N, R, R0, I0):- I0 < N, - проверка на окончание
I1=I0+1, - модификация счетчика
R1=R0*I1, - вычисление текущего значения факториала
fv(N, R, R1, I1). - хвостовая рекурсия
fv (_ , R, R, _ ).
5. На основе программы лабораторной работы "Родственные отношения" составить правило для определения понятий "предок" и "потомок"
ЗАДАНИЕ НА САМОСТОЯТЕЛЬНУЮ РАБОТУ
Вывести рекуррентную формулу для вычисления выражения
Подготовить тесты для проверки правильности работы программы.
Составить и отладить пролог-программу S(N, R) вычисления выражения методом общей (нисходящей) рекурсии.
Составить и отладить пролог-программу вычисления выражения методом хвостовой (восходящей) рекурсии.
Аргументами функции являются:
-
число членов ряда - N;
-
результат вычисления суммы - R.
ЗНАКОПОСТОЯННЫЕ РЯДЫ
-
Сумма квадратов натуральных чисел sum(i2), i=0..N
-
Сумма кубов натуральных чисел sum(i3), i=0..N
-
Сумма квадратов четных чисел sum((2i)2), 0=1..N
-
Сумма квадратов нечетных чисел sum((2i+l)2), i=O..N
-
Сумма кубов четных чисел sum((2i)3), i=0..N
-
Сумма кубов нечетных чисел sum((2i+l)3), i=0..N
-
Сумма чисел обратных натуральным числам. sum(l/i), i=l ..N
-
Сумма чисел обратных квадратам натуральных чисел. sum(l/i2), i=l..N
-
Сумма чисел обратных кубам натуральных чисел. sum(l/i3), i=l ..N 10.Сумма чисел обратных четным числам sum(l/(2i)), i=l ..N
11 .Сумма чисел обратных квадратам четных чисел sum(l/(2i)2 ), i=l ..N 12.Сумма чисел обратных кубам четных чисел sum(l/(2i)3), i=l ..N 13.Сумма чисел обратных нечетным числам sum(l/(2i+l)), i=0..N 14.Сумма чисел обратных квадратам нечетных чисел sum(l/(2i+l)2), i=0..N 15.Сумма чисел обратных кубам нечетных чисел sum(l/(2i+l)3), i=0..N
ЗНАКОЧЕРЕДУЮЩИЕСЯ РЯДЫ
-
Сумма квадратов натуральных чисел sum((-l)I+1i2), i=0..N
-
Сумма кубов натуральных чисел sum((-l)I+1i3), i=0..N
-
Сумма квадратов четных чисел sum((-l)l+1 (2i)2), i=0..N
-
Сумма квадратов нечетных чисел sum((-l)+ (2i+l)2 ), i=0..N
-
Сумма кубов четных чисел sum((-l)I+1 (2i)3 ), 1=0..N
-
Сумма кубов нечетных чисел sum((-l)1+1 (2i+l)3), i=0..N
-
Сумма чисел обратных натуральным числам. sum((-l)I+l/i), i=l ..N
-
Сумма чисел обратных квадратам натуральных чисел. sum((-l)I+1/i2), i=l..N
-
Сумма чисел обратных кубам натуральных чисел. sum((-l)I+1/i3),i=l..N
10. Сумма чисел обратных четным числам sum((-l)1+1/ (2i)), i=l..N
11 .Сумма чисел обратных квадратам четных чисел sum((- 1 )1+1/ (2i)2),i=l..N
-
Сумма чисел обратных кубам четных чисел sum((-l)1+1/ (2i)3), i=l ..N
-
Сумма чисел обратных нечетным числам sum((-l)I+1/ (2i+l)),i=l..N
-
Сумма чисел обратных квадратам нечетных чисел sum((-l)I+1/(2i+l)2),i=l..N
15 .Сумма чисел обратных кубам нечетных чисел sum((- 1 )I+1/(2i+l)3),i=l..N
ФУНКЦИОНАЛЬНЫЕ РЯДЫ
-
cos(x) = 1 – х2/2! + х4/4! – ... + (-1)"* х2п/(2n)! n=0, 1, 2 ..
-
sin(x) = 1 – х3/3! + х5/5! – ... + (-1)"* х2п+1/(2n+1)! n=0, 1, 2 ..
-
sh(x) = 1 + х3/3! + х5/5! + ... + х2п+1/(2n+1)! n=0, 1, 2 ..
-
ch(h) = 1 + х2/2! + х4/4! + . . . + х2п/(2n)! n=0, 1,2..
-
ехр(х) = 1 + х1/!! + х2/2! + ... + хп/(n)! n=0, 1, 2 ..
-
1п(х+1) = х – х2/2 + х3/3 + . . . + (-1)"'1 * (хп/n) ) n= 1, 2 .. –1 <= х <= 1
ПОЛИНОМЫ
1 . Полином Лагерра Ln+1(x) = (2*n+l – x)*Ln(x) - n2 *Ln-1(x)
L0=l L1=l–x
2. Полином Эрмита Hn+1(x) = 2*x*Hn(x) - 2*п*Нn-1(х)
Н0=1 Н1=2х
3. Полином Лежандра
Рп+1(х) = (2*n+1) / (n+1)*х*Рn(х) -( n/(n+1))*Рn-1(х)
Р0=1 P1=x
4. Полином Чебышева Tn+1(x)=2*x*Tn(x)-Tn-1(x)
Т0=1 Т1=х