You are on page 1of 20

Backtraking si Recursivitate

IDU STEFAN ANDREI


GANEA DANIEL-CONSTANTIN

Backtraking si Recursivitate
Unificare;
Backtraking;
Algoritmi recursivi(factorial ,cmmdc ,putere,

sir Fibonacci).

Unificare
Definitie :

Unificarea reprezinta modul in care Prologul


realizeaza potrivirile intre termeni.
!
Procesul de unificare se realizeaza in ambele sensuri.

Unificare
Exemple (fapte):

Definitie: Descriu relatia dintre predicate.


Sintaxa: nume_predicat(argument_1,argument_2);
Exemplu:

Explicatie:

X=marian.

Intoarce rezultat pozitiv (Yes)

marian=andrei.

Intoarce No pentru ca nu pot fi doi atomi distincti

x=marian,X=Y.

X=marian ,Y=marian ; deci intoarce Yes

X=barbat(marian).

Intoarce Yes

X=Y.

Intoarce Yes , iar daca una din variabile ia o valoare


Si cealalta o va avea

Exercitii:
Introduceti urmatoarele interogari si observati de
ce in unele cazuri reuseste si in unele nu:
1. 4+3=7.
2. g(Y,b)=g(b,Y).
3. daniel=daniel.
4. iubeste(alexandra,Y)=iubeste(Y,ioan).
5. g(X,Y)=g(Z,Z).

Unificarea
Exemplu(reguli):
Definitie reguli:
Reprezinta o concluzie care este adevarata daca una sau mai multe fapte
sunt adevarate.
O regula are urmatoarea sintaxa:
Nume_relatie(arg1,,argn):-nume_relatie_1(),,nume_relatie_n())

Exemplu

Fisierul

Swi Prolog

p(X):-a(X).
p(X):-b(X),c(X),d(X),e(X).
p(X):-f(X).
?-p(X).
a(1).
b(1). b(2).
c(1). c(2).
d(2).
e(2).
f(3).

Exemplu
Swi Prolog v-a rezolva aceasta unificare prin algoritmul
de backtracking (vezi metoda de rezolvare pe tabla):

Rezultatul intors: X=1;


X=2;
X=3;
no

Unificare/Backtraking
Definitie:

Backtracking este numele unui algoritm general


de descoperire a tuturor soluiilor unei probleme de
calcul, algoritm ce se bazeaz pe construirea
incremental de soluii-candidat, abandonnd fiecare
candidat parial imediat ce devine clar c acesta nu are
anse s devin o soluie valid.

Exercitii
Programatorul trebuie sa aiba absolvite scoala generala , liceul si facultatea
(1=Absolvit).Trebuie sa aiba urmatoarele atuuri(ingenios , rapid).Le-am notat
(1=bun ,2=foarte bun) si sa cunoasca foarte bine limbajul si sa ii faca placere sa
lucreze (1=satisfacator ,2=bun, 3=excelent).
Deci avem:
prog(Y):-scoala(Y),liceu(Y),fac(Y).
prog(Y):-ingenios(Y),rapid(Y).
prog(Y):-limbaj(Y),placere(Y).
scoala(1). liceu(1). fac(1).
ingenios(1). ingenios(2).
rapid(1). rapid(2).
limbaj(3).
placere(3).

Tema
Urmand exemplul din clasa , realizati o problema de

backtraking .Care sa se refere la un angajat si sa


contina 4 ramuri.Fiecare ramura la randul ei sa
contina minim 2 ramuri.

Recursivitate
Definitie:

Recursivitatea sau recursia este un mod de a


defini unele funcii. Funcia este recursiv, dac defini ia
ei folosete o referire la ea nsi, crend la prima vedere
un cerc vicios, care ns este numai aparent, nu i real.
O funcie recursiv care calculeaz N! se poate exprima

astfel:
factorial(0) = 1
factorial(N) = N * factorial(N 1)

Recursivitate: factorial

Formula matematica : 0!=1 ,N!=N*(N-1)!


In fisier: fact(0,1).
fact(N,K):-

N>0,
N1 is N-1,
fact(N1,K1),
K is N*K1.
In prolog: fact(3,F),write(F).
Raspuns : 6

Recursivitate : cmmdc
Formula matematica: cmmdc(a,b)=a daca a=b

cmmdc(a,b)=cmmdc(a-b)
daca a>b
cmmdc(a,b)=cmmdc(b-a)
Daca b<a
In fisier:

cmmdc(A,A,A).
cmmdc(A,B,C):-A>B,A1 is A-B,cmmdc(A1,B,C).
cmmdc(A,B,C):-A>B,B1 is B-A,cmmdc(A,B1,C).
In prolog:cmmdc(3,2,C).
Raspuns :1

Recursivitate:putere
Formula matematica: X^n

X^0=1
X^2=X*X
In fisier: putere(X,0,1).
putere(X,N,M):-N1 is N-1,putere(X,N1,M1),M1 is X*M1.
go:-read(X),read(N),putere(X,N,P),write(M).

Recursivitate:sirul lui Fibonacci


Numerele lui Fibonacci: 1,1,2,3,5,8,13.Fiecare numar

din secventa este suma a doua numere anterioare .


In fisier: fib(1,1).
fib(2,1).
fib(N,F):-N>2,N1 is N-1 ,fib(N1,F1),N2 is N2,fib(N2,F2),F is F1+F2.
In prolog: fib(6,F).
Raspuns:
F=8? ; (16 ms) no

Exercitii
1.Folosind recursivitatea faceti un program care sa

afiseze toti divizori unui numar

2.Folsind recursivitatea faceti un program care sa

calculeze suma primelor N numere naturale.

Tema
Sa se decida daca un numar K este divizor al

numarului N.Restul impartiri lui N la K este 0.

Bibliografie
http://web.info.uvt.ro/~mmarin/lectures/LP/curs-0

3.pdf
http://inf.ucv.ro/~rstoean/courses/logica/l13.pdf
http://www.et.upt.ro/admin/tmpfile/fileY13636000

58file5146e2ba3b9c9.pdf
http://www.programare.biz/PROLOG/C3a_Recursivi

tate.pdf
http://software.ucv.ro/~cstoica/TP/backtracking.pd

Va multumim!