Sunteți pe pagina 1din 16

NVARE PRIN PROIECTE

Ce sunt
Subprogramele recursive ?
S nvm inteligent

S ne amintim
Ce este un subprogram ?
Care sunt avantajele folosirii subprogramelor ?
Ce sunt parametrii unui subprogram ?
Care sunt metodele de transfer al parametrilor ?
Ce nseamn apelul unui subprogram ?
Care sunt clasele de variabile folosite ntr-un
program ?
Ce vom nva
Ce este recursivitatea ?
Recursivitatea este un concept matematic care implic
definirea unui concept prin referirea la acelai concept.
Astfel, mulimea numerelor naturale se poate defini:
1 este numr natural
orice succesor al unui numr natural este de
asemenea un numr natural
n definiia de mai sus, observm c avem o valoare
iniial (1), iar restul valorilor se obin adunnd 1 la
valoarea anterioar
Definiii recursive

n=
f(3)=




f(2)=2*f(1)
Funcia factorial
Funcia factorial este scris dup definiia recursiv:

function f(n:integer):integer;
begin
if n=0 then f:=1
else f:=n*f(n-1);
end;
var n:integer;
begin
write(n=) ; readln(n );
writeln (n,!=,f(n));
end.
3
3*f(2)
apel recursiv apel iniial
-fiecare apel adaug un context nou
n stiv
-apelurile recursive se termin cnd
ajungem la rezolvarea direct
-la revenirea din apelul recursiv se
golete stiva
f(1)=1*f(0)
f(0) =1
=1
=2
=6
Recursiv i iterativ
S relum funcia factorial n varianta
function f(n:integer):integer;
begin
if n=0 then f:=1
else f:=n*f(n-1);
end;
function f(n:integer):integer;
var i,P: integer;
begin
P:= 1;
for i:=1 to n do P:=P*i;
f:=P;
end;
recursiv iterativ
Ce diferene observai ?
Ce parametri apar n antet ?
Ce variabile locale sunt declarate ?
Ce instruciuni se folosesc ?
O procedur recursiv
Cum afim numerele naturale de la 1 la n printr-o
procedur recursiv ?
Rezolvare: n acest caz, nu avem o formul de
recuren pentru scrierea unui subprogram recursiv.
Pentru a rezolva problema o descompunem n mai
multe subprobleme de acelai tip:
Subproblema p(i): pentru valoarea i a parametrului
vom tipri i dup care apelm (recursiv) p pentru i+1
Apelul iniial este p(1) : ncepem cu 1
Condiia de oprire este s ajungem la n, cnd tiprim
doar n fr alte apeluri
Listarea primelor n numere naturale
program numar;
var n: integer; { cte numere tiprim }
procedure p(i:integer); { procedura p cu parametrul i }
begin
if i=n then write(n) { rezolvarea direct (condiia de STOP) }
else begin
write(i,' '); { Subproblema p(i): tiprim i }
p(i+1); { trecem la subproblema p(i+1) }
end;
end;
begin
write('n='); readln(n); { citim valoarea lui n}
p(1); { apelul iniial }
readln;
end.
Ce este un subprogram recursiv ?
Un subprogram recursiv se caracterizeaz prin
proprietatea c se auto-apeleaz, adic din interiorul lui se
apeleaz pe el nsui. Din afara subprogramului facem un
prim apel al acestuia, dup care subprogranul se auto-
apeleaz de un anumit numr de ori: la fiecare nou auto-
apelare a subprogramului, se execut din nou secvena de
instruciuni ce reprezint corpul su, eventual cu alte date,
crendu-se un aa-numit lan de auto-apeluri recursive.
Putem spune c un subprogram recursiv are acelai efect ca i
un ciclu: repet execuia unei anumite secvene de
instruciuni. Dar, la fel ca n cazul unui ciclu, este necesar ca
repetarea s nu aib loc la infinit. De aceea n corpul
subprogramului trebuie s existe cel puin o testare a unei
condiii de oprire, la ndeplinirea creia se ntrerupe lanul de
auto-apeluri.
Cum scriem un subprogram recursiv ?
1. Trebuie s formulm problema n termeni recursivi
- stabilim formula de recuren
- identificm soluia n cazul rezolvrii directe, dat de
obicei sub forma condiiilor iniiale
- formulm subproblemele de rezolvat n cazul n care nu
dispunem de o formul de recuren
2. Scriem subprogramul recursiv:
- soluia direct se scrie sub forma condiiei de oprire
- apelul recursiv rezult din formula de recuren
- la fiecare apel problema parial trebuie rezolvat complet

Rspundei la ntrebri
Rspundei la ntrebri
Ai neles ? ncercai s rezolvai

S recapitulm
Ce este recursivitatea ?
Cum recunoatem un subprogram recursiv ?
Unde scriem apelul iniial ?
Care este rolul condiiei de oprire ?
Ce diferene de scriere exist ntre versiunea
iterativ i cea recursiv a unui algoritm ?
Cum scriem un subprogram recursiv pentru care
avem o formul de recuren ?
Cum formulm recursiv un subprogram pentru care
nu avem o formul de recuren ?



Subprograme recursive
Ce am neles
Know
Ce vreau s tiu
Wonder
Ce am nvat
Learn

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

  • Model Restanta NR 3
    Model Restanta NR 3
    Document1 pagină
    Model Restanta NR 3
    Daniel Fedeles
    Încă nu există evaluări
  • Model Restanta NR 2
    Model Restanta NR 2
    Document1 pagină
    Model Restanta NR 2
    Daniel Fedeles
    Încă nu există evaluări
  • Curs11 Logaa
    Curs11 Logaa
    Document7 pagini
    Curs11 Logaa
    manyman123
    Încă nu există evaluări
  • SD Curs-12
    SD Curs-12
    Document27 pagini
    SD Curs-12
    Daniel Fedeles
    Încă nu există evaluări
  • Model Restanta NR 1
    Model Restanta NR 1
    Document1 pagină
    Model Restanta NR 1
    Daniel Fedeles
    Încă nu există evaluări
  • SD Curs-03
    SD Curs-03
    Document40 pagini
    SD Curs-03
    Daniel Fedeles
    Încă nu există evaluări
  • Curs 12
    Curs 12
    Document67 pagini
    Curs 12
    Daniel Fedeles
    Încă nu există evaluări
  • SD Curs-08
    SD Curs-08
    Document56 pagini
    SD Curs-08
    Olea Zubcova
    Încă nu există evaluări
  • Adeverinta 2014
    Adeverinta 2014
    Document1 pagină
    Adeverinta 2014
    Daniel Fedeles
    Încă nu există evaluări
  • Antologialiternet 2002 Vol 1
    Antologialiternet 2002 Vol 1
    Document159 pagini
    Antologialiternet 2002 Vol 1
    Trofin Petronela
    Încă nu există evaluări
  • Structuri de Date Si Algoritmi
    Structuri de Date Si Algoritmi
    Document71 pagini
    Structuri de Date Si Algoritmi
    jack
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document10 pagini
    Lab 1
    Daniel Fedeles
    Încă nu există evaluări