180 likes | 345 Views
- Proiect interdisciplinar -. RECURSIVITATEA. Random :. Alice Bătușariu Laura Dumitru Ioana Drasovean Anca Isailă. Prezentare general ă. Recursivitatea este una din noțiunile fundamentale ale informaticii. Utilizarea frecventă a recursivității s-a făcut după anii ’ 80.
E N D
- Proiect interdisciplinar - RECURSIVITATEA
Random: • Alice Bătușariu • Laura Dumitru • Ioana Drasovean • Anca Isailă
Prezentare generală • Recursivitatea este una din noțiunile fundamentale ale informaticii. Utilizarea frecventă a recursivității s-a făcut după anii ’80. • Definiție:Recursivitatea este un mecanism general de elaborare a programelor. Ea constă în posibilitatea ca un subprogram să se autoapeleze.
Recursivitatea în matematicăMetoda 1(Matematică) • Enunțul problemei“Iepurele” Plecând de la o singură pereche de iepuri și știind că fiecare pereche de iepuri produce în fiecare lună o nouă pereche de iepuri, care devine “productivă” la vârsta de 1 lună, calculați câte perechi de iepuri vor fi după n luni. (se consideră că iepurii nu mor în decursul respectivei perioade de n luni) • Formula de calcul Fn+1 = Fn + Fn-1; F1=1; F2=1. Ex: F1=1, F2=1 => F3= 1+1 => F3=2;
Metoda 2 (Informatică) • program fibonacci; var v:array[1..100] of integer; n,k,i,a,b:integer; begin writeln('Introduceti numarul pana la care doriti sa se afiseze valori din sirul lui Fibonacci: n= ‘ ); read(n); a:=1; b:=1; v[1]:=1;v[2]:=1; k:=2; while v[k]<=n do begin k:=k+1; b:=a+b; v[k]:=b; k:=k+1; a:=a+b; v[k]:=a; end; for i:=1 to k-1 do writeln(v[i]); if n=v[k-1] then writeln('Numarul dat ESTE in sirul lui Fibonacci!') else writeln('Numarul dat NU este in sirul lui Fibonacci!'); End.
Probema putere: var n:integer; put:longint; function putere (n:integer):longint; var i:integer; p :longint; begin p:=n; for i:= 1 to n-1 do p:=p*n; putere:=p; end; begin {pp} readln(n); put:=putere(n); writeln (put); end.
Film Filmul Alt filmulet
Recursivitateaîn informatică • Recursivitatea este folosită în informatică pentru translatarea problemelor din matematica în programe speciale care să calculeze totul mult mai uşor decât ar putea omul să o facă prin alte metode.
Execuţiaapelurilor recursive • După cum ştim, în limbajul Pascal subprogramele sunt de două tipuri: funcţii şi proceduri. • Oricare ar fi tipul subprogramului, acesta se poate autoapela, însă modul în care se realizează autotransferul diferă.
Realizareaautoapelului • În cazul procedurilor apelul procedurii respective, din interiorul ei. • În cazul funcţiilor o operaţie de atribuireprin care numele funcţiei trebuie să figureze în partea dreaptă a operatorului de atribuire
Aplicaţii recursive • Sa se scrie o functie recursiva care calculeaza n! • Sa se scrie o functie recursiva care calculeaza produsul a*b (ca fiind o adunare repetata) • Sa se scrie o functie recursiva care calculeaza a^b • Sa se descompuna un numar in suma de doua numere Ex 11 se descompune in: 1+10, 2+9, 3+8, 4+7, 5+6 Expresii: • 1*2+2*3+3*4+4*5 • 1+3+5+7+… • 1*4*7*10*… • 2*4*6*8*…. • 1x2+2x3+3x4+....+nx(n+1)½+2/3+3/4+......+n/(n+1) • (1+2)x(2+3)x(3+4).....x(n+n+1)
Implementare • Dați click pe imagine pentru a vedea fișierul Pascal cu rezolvarea problemei “Al n-lea termen”:
CONCLUZII Un algoritm recursiv are la baza un mecanism de gandire diferit de cel cu care ne-am obisnuit deja. Atunci cand scriem un algoritm recursiv este suficient sa gandim ce se intampla la un anumit nivel pentru ca la orice nivel se intampla exact acelasi lucru. Un algoritm recursiv corect trebuie sa se termine ,contrar programul se va termina cu eroare si nu vom primi rezultatul asteptat.Conditia de terminare va fi pusa de programator. Un rezultat matematic de excepție afirma ca pentru orice algoritm iterativ exista si unul recursiv echivalent si invers,pentru orice algoritm recursiv exista si unul iterativ echivalent. Recursivitatea indirecta are loc atunci când o procedura (funcție) apelează o alta procedura (funcție),care la rândul ei o apelează pe ea.
Avantaje • soluții mai clare pentru probleme si • lungimi mai mici pentru program • avantajul principal al recursivității este scrierea mai compacta si mai clara a funcțiilor care exprima procese de calcul recursive. Obs. În aceasta clasa de procese intra cele generate de metodele de căutare cu revenire (“backtracking”) si metodele de divizare (“divide et impera”).
Dezavantaje • timp mai mare de execuție • spațiu de memorie alocata mai mare. Observatie Atunci când programul recursiv poate fi transformat intr-unul iterativ să se facă apel la cel din urma.
Bibliografie • www.youtube.com • www.google.ro • www.infostone.com • http://news.deviantart.com/article/81499/ • http://my.opera.com/marusca/blog/show.dml/2917508