1 / 8

Recursivitate

Recursivitate. “Jocul pe care-l jucăm este să ne prefacem şi ne prefacem că de fapt noi nu ne prefacem. Ne facem că uităm cine suntem, şi apoi uităm că noi am uitat. Cine suntem noi de fapt?” Bernard Gunter. Ce este recursivitatea?.

liana
Télécharger la présentation

Recursivitate

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Recursivitate “Jocul pe care-l jucăm este să ne prefacem şi ne prefacem că de fapt noi nu ne prefacem. Ne facem că uităm cine suntem, şi apoi uităm că noi am uitat. Cine suntem noi de fapt?” Bernard Gunter

  2. Ce este recursivitatea? • Unobiect sau un fenomen se defineşte în mod recursiv, dacă în definiţia sa există o referire la el însuşi. • În programare, recursivitatea este implementată cu ajutorul subprogramelor.

  3. Când un subprogram este recursiv? • Un subprogram este recursiv dacă el se autoapelează (când subprogramul este lansat în execuţie, se fac apeluri la el însuşi).

  4. Ce trebuie să urmărim atunci când construim o funcţie recursivă? • Trebuie să concepem o funcţie recursivă din două ramuri: • -prima ramură a definiţiei recursivecuprinde una sau mai multe definiţii directe (o valoare iniţială cunoscută) Această parte din definiţiile recursive este esenţială şi face ca procesul de calcul să se oprească după un număr de paşi. Ea se numeşte condiţie de oprire sau terminare. • - a doua ramură a definiţiei recursive cuprinde descrierea operaţiilor care se fac la un pas oarecare al algoritmului.(formula de recurenţă)

  5. Care sunt regulile pentru scrierea corectă a subprogramelor recursive? • Orice subprogram recursiv trebuie să se execute, cel puţin o dată, fără a se autoapela.Condiţia de oprire se va scrie pentru valori extreme ale mulţimii valorilor de testat. • Autoapelurile trebuie să conducă spre situaţia (situaţiile) în care subprogramul se execută direct (fără autoapel).

  6. Execuţia programelor recursive • La activarea unui subprogram, se salvează în stiva procesorului (stack): • valorile parametrilor transmişi prin valoare şi adresele parametrilor transmişi prin adresă; • valorile variabilelor locale în subprogram; • adresa de revenire din subprogram.

  7. Execuţia programelor recursive • În cazul subprogramelor recursive mecanismul este, bineînţeles, acelaşi. La fiecare apel al subprogramului, se va aloca în stivă un nou nivelunde se va salva setul de valori (parametri, variabile locale, adresa de revenire) corespunzătoare stării curente a execuţiei subprogramului. • De subliniat faptul că, deşi parametrii şi variabilele locale au, pentru toate apelurile, aceeaşi identificatori, valorile lor diferă de la o execuţie la alta. În referirile la identificatori, valorile acestora corespund întotdeauna ultimului set de valori salvate. • La terminarea execuţiei unui apel recursiv, se reia ultima execuţie întreruptă, în stivă fiind activ setul de valori corespunzătoare acesteia.

  8. Concluzie • Ideea de bază a recursivităţii este aceea că fiecare nou autoapel al funcţiei (autogenerarea unui nou proces de acelaşi fel) ne apropie desoluţia finală, care corespunde valorii iniţiale cunoscute.

More Related