Upload
haviva-jordan
View
16
Download
0
Embed Size (px)
DESCRIPTION
- 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. - PowerPoint PPT Presentation
Citation preview
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ă)o 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)
o Formula de calculFn+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;
beginwriteln('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 begink:=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;beginp:=n;for i:= 1 to n-1 do p:=p*n;putere:=p;end;
begin {pp}readln(n);put:=putere(n);writeln (put);end.
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ţia apelurilor 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ă.
Realizarea autoapelului
În cazul procedurilor
apelul procedurii respective, din interiorul ei.
În cazul funcţiilor
o operaţie de atribuire prin 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.
ObservatieAtunci când programul recursiv poate fi transformat intr-unul iterativ să se facă apel la cel din urma.