ce sunt subprogramele recursive n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Ce sunt Subprogramele recursive ? PowerPoint Presentation
Download Presentation
Ce sunt Subprogramele recursive ?

Loading in 2 Seconds...

play fullscreen
1 / 16

Ce sunt Subprogramele recursive ? - PowerPoint PPT Presentation


  • 106 Views
  • Uploaded on

Ce sunt Subprogramele recursive ?. învăţare prin p roiecte. “S ă învăţăm 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 ?

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Ce sunt Subprogramele recursive ?' - chiko


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
ce sunt subprogramele recursive

Ce suntSubprogramele recursive ?

învăţare prin proiecte

“Să învăţăm inteligent”

s ne amintim
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 nv a
Ce vom învăţa
  • Ce este recursivitatea?

Recursivitateaeste un concept matematic care implică definirea unui concept prin referirea la acelaşi concept.

Astfel, mulţimea numerelor naturale se poate defini:

  • 1 este număr natural
  • orice succesor al unui număr natural este de asemenea un număr natural
  • În definiţia de mai sus, observăm că avem o valoare iniţială (1), iar restul valorilor se obţin adunând 1 la valoarea anterioară
func ia factorial
Funcţia factorial
  • Funcţia factorial este scrisă după definiţia 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.

  • apel recursiv
  • apel iniţial
  • fiecare apel adaugă un context nou în stivă
  • apelurile recursive se termină când ajungem la rezolvarea directă
  • la revenirea din apelul recursiv se goleşte stiva

3

n=

f(3)=

3*f(2)

=6

f(2)=2*f(1)

=2

=1

f(1)=1*f(0)

f(0)

=1

recursiv i iterativ
Recursiv şi iterativ
  • Să reluăm funcţia factorial în varianta
  • recursivă
  • iterativă

function f(n:integer):integer;

var i,P: integer;

begin

P:= 1;

for i:=1 to n doP:=P*i;

f:=P;

end;

function f(n:integer):integer;

begin

if n=0 then f:=1

else f:=n*f(n-1);

end;

Ce diferenţe observaţi ?

  • Ceparametriapar în antet ?
  • Ce variabile locale sunt declarate ?
  • Ce instrucţiuni se folosesc ?
o p rocedur recursiv
O procedurărecursivă
  • Cum afişăm 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 acelaşi tip:
  • Subproblema p(i): pentru valoarea i a parametrului vom tipări i după care apelăm (recursiv) p pentru i+1
  • Apelul iniţial este p(1) : începem cu 1
  • Condiţia de oprireeste să ajungem la n, când tipărim doar n fără alte apeluri
listarea primelor n numere naturale
Listarea primelor n numere naturale

program numar;

var n: integer;{ câte numere tipărim }

procedure p(i:integer); { procedura p cu parametrul i }

begin

if i=n then write(n){ rezolvarea directă (condiţia de STOP) }

else begin

write(i,' ');{ Subproblema p(i): tipărim i }

p(i+1);{ trecem la subproblema p(i+1) }

end;

end;

begin

write('n='); readln(n); { citim valoarea lui n}

p(1); { apelul iniţial }

readln;

end.

ce este un subprogram recursiv
Ce este un subprogram recursiv ?
  • Un subprogram recursivse caracterizează prin proprietatea că se auto-apelează, adică din interiorul lui se apelează pe el însuşi. Din afara subprogramului facem un prim apel al acestuia, după care subprogranul se auto-apelează de un anumit număr de ori: la fiecare nouă auto-apelare a subprogramului, se execută din nou secvenţa de instrucţiuni ce reprezintă corpul său, eventual cu alte date, creîndu-se un aşa-numit „lanţ de auto-apeluri recursive”.
  • Putemspunecă un subprogramrecursiv are acelaşiefectcaşi un ciclu: repetăexecuţiauneianumitesecvenţe de instrucţiuni. Dar, la felcaîncazulunuiciclu, este necesarcarepetareasănuaibăloc la infinit. De aceeaîncorpulsubprogramuluitrebuiesă existe celpuţin o testare a uneicondiţii de oprire, la îndeplinireacăreia se întrerupelanţul de auto-apeluri.
cum scriem un subprogram recursiv
Cum scriem un subprogram recursiv ?

Trebuie săformulăm problemaîn termenirecursivi

-stabilimformula de recurenţă

- identificăm soluţia în cazulrezolvăriidirecte, dată de obicei sub forma condiţiilor iniţiale

- formulăm subproblemele de rezolvat în cazul în care nu dispunem de o formulă de recurenţă

Scriemsubprogramulrecursiv:

- soluţia directă se scrie sub forma condiţiei de oprire

- apelulrecursivrezultă din formula de recurenţă

- la fiecare apel problema parţială trebuie rezolvată complet

s recapitul m
Să recapitulăm
  • Ce este recursivitatea?
  • Cum recunoaştem un subprogram recursiv ?
  • Unde scriemapelul iniţial?
  • Care este rolul condiţiei de oprire?
  • Ce diferenţe 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 formulăm recursiv un subprogram pentru care nu avem o formulă de recurenţă?