Sunteți pe pagina 1din 16

Welcome

Real programmers don't work from 9 to 5. If any real


programmers are around at 9am it's because they were up
all night

Informatica este arta iar


informaticianul creatorul!

Mascasan Anca
Muresan Vlad
Pop Daiana
Sandor Alexandru

Relatii de recurenta
Siruri de recurenta

Un sir a1,a2,,an, este o succesiune de valori


numite elementele sirului, aranjate intr-o oridine
definita.Fiecare element ocupa in cadrul sirului o
pozitie fixata, care se numeste rangul elemntului.

Definitie:
Unele siruri pot fi definite cu ajutorul unor
formule care exprima orice termen al sirului,
incepand cu un anumit rang,in fuctie termenul
precendent sau recurenta. Pentru a putea defini
recurent un sir, mai trebuie sa indicam primul
termen sau primii termeni.

Sirul lui Fibonacci


Sirul lui Fibonacci este un sir de numere
intregi (F1,F2,,Fn,),definit recurent astfel:
primii doi termeni sunt egali cu 1, apoi
fiecare termen incepand cu al treilea,este
egal cu suma dintre precedentul si
anteprecedentul sau.

Exemplu:
-pentru un termen oarecare Fk
(termenul de rang k),precedentul sau
este Fk-1 (de rang k-1),iar
anteprecedentul sau este Fk-2 (de rang
k-2).Astfel, F1=1, F2=1 si Fk=Fk-1+Fk2;k>3.

Pentru o descriere completa scriem o


relatie de recurenta care inglobeaza atat
formula de calcul,cat si valorile termenilor
definiti separat:
Fk = - 1, pentru k = 1 si 2
- Fk-1 + Fk-2, pentru k >= 3

Function F(x:integer):integer;
Caracterul recursiv
Begin
al algoritmului
if x=1 or x=2 then Fx=1;
pentru
if k>=3 then Fx=Fx-1 +
determinarea
Fx-2;
termenilor sirului lui
end;
Fibonacci este
Dar aflarea termenilor Fk-1 si Fk-2 se
evident.Pentru a
poate face cu acelasi algoritm, doar
calcula un termen
ca in loc de k avem
oarecare Fk, avem
K-1 respectiv k-2.Prin urmare,
nevoie de termenii algoritmu care calculeaza termenul
Fk trebuie sa se auto- apeleze de
precedenti Fk-1 si Fk-2 doua ori , in scopul determinarii
termenilor Fk-1 si Fk-2.

Factorialul unui numar natural


Factorialul unui numar natural k este
k!
= 1*2*3**(k-1)*k (produsul numerelor nat. pana
la k), care se mai poate scrie :
k!=
k*(k-1)**3*2*1. Dar (k-1)**3*2*1 este
tocmai (k-1)! De aici se deduce o asa numita
relatie de recurenta: k!=K*(k-1)!.

Folosind faptul ca 0!= 1 ,obtinem


relatia de recurenta completa:

Function F(x:integer):integer;
Begin
if x=0 then F(x):=1;
if x > 0 then F(x):=x*(xend;

Caracterul recursiv consta in faptul ca din


corpul algoritmului care calculeaza k! se
auto apeleaza algoritmul pentru a calcula
(k-1)!

Sume cu n termeni
Suma primelor n numere naturale impare
Pe caz general, sirul primelor n numere naturale impare
este (1,3,5,,2n-1).Notand termenii sirului cu a1, a2,,an.
Observam ca un termen oarecare ak (de rang k) are valoarea
2*k-1.Vom spune ca sirul de mai sus este definit prin
formula termenului general ak=2*k-1.
Suma primelor n numere nat. este: Sn=a1+a2+
+an=1+3+5++2n-1.

Daca al n-lea termen, cel de rang


n , este 2*n-1, atunci al (n-1)-ulea termen
este 2(n-1)-1, adica 2*n-3 .Astfel,
Sn=1+3+5++(2*n-3)+(s*n-1).Dar 1+3+5+
+(2*n-3) reprezinta suma primelor n-1
numere naturale impare notata Sn-1, deci
Sn=(2*n-1)+Sn-1.Pentru n=0, avem cazul
particular S0=0.

Obtinem astfel relatia de recurenta


completa:
Sn= 0 npentru n=0
(sn-1)+Sn-1 ,pentru n>0
Function S(x:integer):integer;
begin
if n=0 then S:=0;
if n>0 then S:=(2n-1) + Sn-1;
end;

Exemplu de probleme cu siruri de


recurenta:
var a,b:real; n:integer;
Se considera sirurile definite
recurent astfel:a0=a; b0=b,
a,b>0:
an=(a (n-1)+b(n-1))/2 ,
bn=a(n-1)*b(n-1).
Sa se scrie un program care sa
citeasca a, b si n si sa se
calculeze an si bn.

function bn(n:integer):real;
forward;
function an(n:integer):real;
begin
if n=0
then an:=a
else an:=(an(n-1+bn(n-1))/2
end;
function bn(n:integer):real;
begin
if n=0 then bn:=b
else bn:=sqrt(an(n-1)*bn(n-1));
end;
begin
write(a=); readln(a);
write(b=); readln(b);
write(n=); readln(n);
writeln(an(n):5:10, ,bn(n):5:10);
end.

Sfarsit

Windows is shuting down

S-ar putea să vă placă și