Рекурсия в ПРОЛОГе
description
Transcript of Рекурсия в ПРОЛОГе
Рекурсия в ПРОЛОГе
Понятие рекурсииПримеры рекурсивных объектов
Рекурсивные правила в ПРОЛОГеПримеры рекурсивных правил
Вычисление факториалаПоследовательность Фибоначчи
Задача о Ханойских башнях
Понятие рекурсии
• Рекурсия — способ организации действий, при котором процесс обращается сам к себе.
• Рекурсивным называется любой объект, который частично определяется через себя.
Рекурсия в художественных образах
клип
Гравюра голландского художника Мориса Эшера "Рисующие руки"
ПРИМЕРЫ РЕКУРСИИ
У попа была собака, он её любил,Она съела кусок мяса, он её убил,В землю закопал,Надпись написал:
"У попа была собака, он её любил, Она съела кусок мяса, он её убил, В землю закопал, Надпись написал:
"У попа была собака, он её любил, Она съела кусок мяса, он её убил, В землю закопал, Надпись написал:
…
Рекурсия в природе
Рекурсия в математике: Треугольник Серпиньского
фрактал, один из двумерных аналогов множества Кантора предложенный польским математиком В. Серпиньским в 1915 году. Также известен как «решётка» или «салфетка» Серпиньского.
Рекурсия в математике:
Снежинка Коха
Рекурсия в математике: Алгебраические фракталы
Множество Мандельброта . Алгоритм построения основан на простом итеративном выражении: Z[i+1]
= Z[i] * Z[i] + C, где Zi и C - комплексные переменные. Итерации выполняются для каждой стартовой точки C прямоугольной или
квадратной области - подмножестве комплексной плоскости.
Примеры рекурсивных определений
1. Сумма первых N натуральных чисел S(N)=1+2+3+…+(N-1)+N
S(N)=
2. Степень с натуральным показателемXn = Xn-1*X
Xn =
1N если ,)1(
1N если ,1
NNS
1N если ,*11n если ,
XnX
X
Рекурсивные правила в ПРОЛОГе
Рекурсивное правило
Рекурсивная часть (обращение к себе)
нерекурсивная часть(остановка рекурсии)
Примеры рекурсивных правил:Вычисление факториала
n!=1*2*3*...*(n-1)*n.
Граничное условие: n=0 % нерекурсивная часть правила : 0! = 1
fact (0, 1):- !. % рекурсивная часть правила: n! = (n-1)!*n fact (N, FN):- M=N–1, fact (M, FM), FN=FM*N.
0 если ,)!*1(
0 если ,1
nnn
nn!=
fact (0, 1):- !.fact (N, FN):- M=N–1, fact (M, FM), FN=FM*N.
fact (3, FN)-----------------------
N=3 FN=
M=N-1--------------
2=3 -1
fact (2, FM)-----------------------
M=2 FM= FN=FM*N
-----------------
M’=M-1--------------
1=2 -1
fact (1, FM’)-----------------------
M’ = 1 FM’=FM=FM’*M
-------------------
M’’=M’-1--------------
0=1 -1
fact (0, FM’’)-----------------------
M’’=0 FM’’= 1
FM’=FM’’*M’--------------------
FM’=1*1=1
6
FN=2*3=6
FM=1*2=21
2
Примеры рекурсивных правил: Числа Фибоначчи
F(1)=1, Ff(2)=1, F(n)=F(n-1)+F(n-2).
1, 1, 2, 3, 5, 8, 13, 21,...
F(n) =
2 если ),2()1(
2 если ,1
nnFnF
n
Правило для вычисления n-го числа Фибоначчи
fib(N,F),
N-порядковый номер, F- значение N-го числа Фибоначчи
fib(1,1):-!. %F(1) =1
fib(2,1):-!. %F(2) =1
fib(N,F):- %F(N)=F(N-1)+F(N-2)
N1=N-1,fib(N1,F1),
N2=N-2,fib(N2,F2), F=F1+F2.
Задача о Ханойских башнях
(1)А → В:
Разложение исходной задачи на подзадачи:(1) Переложить 1,2-й диски с А на В (А→В)
(2) Переложить 3-й диск с А на С (А→С)
(3) Переложить 1,2-й диски с В на С (В→С)
(3)B → C:
C→ВА→С А→В
B→A B→C А→C
A
A
A
B
B
B
C
C
CРешение подзадач:
1,2
1,2
Решение при N=3
Рекурсивное правило для N дисков
move(1,A,B,C):- write("Перенести диск с ", A, " на ",C),nl,!.
move(N,A,B,C):- M=N-1,move(M,A,C,B), write("Перенести диск с ", A ," на ",C),nl, move(M,B,A,C).
Задача о Ханойских башнях
А В С
Перенести диск с A на BПеренести диск с A на CПеренести диск с B на CПеренести диск с A на BПеренести диск с C на AПеренести диск с C на BПеренести диск с A на BПеренести диск с A на CПеренести диск с B на CПеренести диск с B на AПеренести диск с C на AПеренести диск с B на CПеренести диск с A на BПеренести диск с A на CПеренести диск с B на C
Количество перемещений 2n -1