16
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 Welcome

Sirurile recurente.2

Embed Size (px)

DESCRIPTION

siruri recurente

Citation preview

  • Real programmers don't work from 9 to 5. If any real programmers are around at 9am it's because they were up all nightWelcome

  • Informatica este arta iar informaticianul creatorul!Mascasan AncaMuresan VladPop DaianaSandor Alexandru

  • Relatii de recurentaSiruri 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 FibonacciSirul 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+Fk-2;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; Begin if x=1 or x=2 then Fx=1; if k>=3 then Fx=Fx-1 + Fx-2;end; Caracterul recursiv al algoritmului pentru determinarea termenilor sirului lui Fibonacci este evident.Pentru a calcula un termen oarecare Fk, avem nevoie de termenii precedenti Fk-1 si Fk-2Dar aflarea termenilor Fk-1 si Fk-2 se poate face cu acelasi algoritm, doar ca in loc de k avem K-1 respectiv k-2.Prin urmare, algoritmu care calculeaza termenul Fk trebuie sa se auto- apeleze de 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)!.

  • Function F(x:integer):integer; Begin if x=0 then F(x):=1; if x > 0 then F(x):=x*(x-1);end; Folosind faptul ca 0!= 1 ,obtinem relatia de recurenta completa:

    Caracterul recursiv consta in faptul ca din corpul algoritmului care calculeaza k! se auto apeleaza algoritmul pentru a calcula (k-1)!

  • Sume cu n termeniSuma 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: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.

    var a,b:real; n:integer; 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.

  • SfarsitWindows is shuting down