Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Л.Р._Ш.И_2-6 / L4_Recur

.doc
Скачиваний:
2
Добавлен:
20.02.2016
Размер:
92.67 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА "Вычисления методом рекурсии"

ЦЕЛЬ РАБОТЫ

Изучение Рекурсивных методов вычисления выражений:

- решение задачи о размещениях;

- вычисление рядов;

- вычисление чисел Фибоначчи;

- вычисление методом хвостовой рекурсии;

- выполнение индивидуального задания.

Общие сведения

  1. Способ решения задачи состоит в том, чтобы разбить исходную задачу на более мелкие подзадачи, решить их, а затем объединить подзадачи для того, чтобы получить решение исходной задачи.

Рис.1.

Если подзадача есть уменьшённым вариантом исходной задачи, то способ её разбиения и решения идентичен способу, применённому к исходной задаче. Такой процесс называется рекурсией.

  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. Решение задачи состоит из фазы разбиения и фазы решения.

1 фаза: задача разбивается до тех пор, пока последняя подзадача не станет достаточно примитивной с известным решением

.

II фаза: выполняется решение более сложной задачи на основе наглядности решения простой подзадачи.

Восходящая стратегия (хвостовая рекурсия).

f(N,S): - f(N,S,N0,S0)

Для указания на «размер» Для записи

решённой к настоящему промежуточного решения

времени задачи (счётчик)

Два дополнительных параметра

Цель работы.

Нахождение суммы числового ряда методом рекурсии и вывод результатов в два окна.

Порядок выполнения работы.

  1. Загрузить компилятор языка логического программирования PROLOG.

  2. Составить и отладить программу вычисления суммы числового ряда методом общей и хвостовой рекурсии.

(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. Вывести результаты в окна.

В первое окно выводиться таблица сумм для 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.

ЗНАКОПОСТОЯННЫЕ РЯДЫ

  1. Сумма квадратов натуральных чисел sum(i2), i=0..N

  2. Сумма кубов натуральных чисел sum(i3), i=0..N

  3. Сумма квадратов четных чисел sum((2i)2), 0=1..N

  4. Сумма квадратов нечетных чисел sum((2i+l)2), i=O..N

  5. Сумма кубов четных чисел sum((2i)3), i=0..N

  6. Сумма кубов нечетных чисел sum((2i+l)3), i=0..N

  7. Сумма чисел обратных натуральным числам. sum(l/i), i=l ..N

  8. Сумма чисел обратных квадратам натуральных чисел. sum(l/i2), i=l..N

  9. Сумма чисел обратных кубам натуральных чисел. 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

ЗНАКОЧЕРЕДУЮЩИЕСЯ РЯДЫ

  1. Сумма квадратов натуральных чисел sum((-l)I+1i2), i=0..N

  2. Сумма кубов натуральных чисел sum((-l)I+1i3), i=0..N

  3. Сумма квадратов четных чисел sum((-l)l+1 (2i)2), i=0..N

  4. Сумма квадратов нечетных чисел sum((-l)+ (2i+l)2 ), i=0..N

  5. Сумма кубов четных чисел sum((-l)I+1 (2i)3 ), 1=0..N

  6. Сумма кубов нечетных чисел sum((-l)1+1 (2i+l)3), i=0..N

  7. Сумма чисел обратных натуральным числам. sum((-l)I+l/i), i=l ..N

  1. Сумма чисел обратных квадратам натуральных чисел. sum((-l)I+1/i2), i=l..N

  2. Сумма чисел обратных кубам натуральных чисел. 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

  1. Сумма чисел обратных кубам четных чисел sum((-l)1+1/ (2i)3), i=l ..N

  2. Сумма чисел обратных нечетным числам sum((-l)I+1/ (2i+l)),i=l..N

  3. Сумма чисел обратных квадратам нечетных чисел sum((-l)I+1/(2i+l)2),i=l..N

15 .Сумма чисел обратных кубам нечетных чисел sum((- 1 )I+1/(2i+l)3),i=l..N

ФУНКЦИОНАЛЬНЫЕ РЯДЫ

  1. cos(x) = 1 – х2/2! + х4/4! – ... + (-1)"* х2п/(2n)! n=0, 1, 2 ..

  2. sin(x) = 1 – х3/3! + х5/5! – ... + (-1)"* х2п+1/(2n+1)! n=0, 1, 2 ..

  3. sh(x) = 1 + х3/3! + х5/5! + ... + х2п+1/(2n+1)! n=0, 1, 2 ..

  4. ch(h) = 1 + х2/2! + х4/4! + . . . + х2п/(2n)! n=0, 1,2..

  5. ехр(х) = 1 + х1/!! + х2/2! + ... + хп/(n)! n=0, 1, 2 ..

  6. 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

Соседние файлы в папке Л.Р._Ш.И_2-6