1 / 5

Recursivitate

Recursivitate. Burdea David si Catalin Negulescu. Definita procesului de recursivitate. Recursivitatea reprezinta o tehnica de programare de o importanta deosebita. Ea permite o exprimare extrem de concisa si clara a algoritmilor de rezolvare a unor probleme complexe.

marty
Download Presentation

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 Burdea David siCatalinNegulescu Burdea David si Catalin Negulescu

  2. Definitaprocesului de recursivitate • Recursivitatea reprezinta o tehnica de programare de o importanta deosebita. Ea permite o exprimare extrem de concisa si clara a algoritmilor de rezolvare a unor probleme complexe. • Un subprogram este recursiv daca se autoapeleaza pe el insusi . Burdea David si Catalin Negulescu

  3. Observatii • 1) Orice f recursivatrebuiesacontina o conditie de oprire,respectiv de continuare. • 2)la fiecareapel al f. se executaaceasisecventa de instructiuni. • 3)tinandseama de observatiaanterioarapentru a scrie un program recursivproblematrebuiesacontina o functie care sacontinarelatia de recurenta • 4)la fiecareapel in zona de stiva a memoriei se creeaza un nivelsaupestiva se memoreazavalparametrilorformalitransmisiprinvaloare, adresaparam. formalitransmisiprinreferinta, adresa de revenire, variabilele locale cu val din mom respectiv. • 5)toateinstructiunile din subprogram se executapentrufiecarereapel. Burdea David si Catalin Negulescu

  4. Limbajul C/C++ • for(i=1;i<=n;i++) {secventa de operatii} while(cond_logica) {secventa de operatii} Burdea David si Catalin Negulescu

  5. unsigned fib(unsigned n) { if (n <= 1) return 1; else return fib(n-1)+fib(n-2); } Unsigned fib_smart(unsigned n) { unsigned f2 = 1, f1 = 1, f; if (n <= 1) return 1; while (--n) { f = f1 + f2; f2 = f1; f1 = f; } return f; } unsigned fib_nonrec(unsigned n) { inti, *f, res; if (n <= 1) return 1; f = malloc(n * sizeof(int)); f[1] = f[0] = 1; for (i = 2; i < n; i++) f[i] = f[i-1] + f[i-2]; res = f[n-1] + f[n-2]; free(f); return res; } • Atentie! Traducereadirectaa formuleirezultaınapeluriredundante!(se apeleazadin nou fib(n-2) siın fib(n-1), etc.) • ⇒nr. de apeluri (catept. fib(5)?) e exponential ın n (f. ineficient) Burdea David si Catalin Negulescu

More Related