Sunteți pe pagina 1din 2

Structuri de Date (1CC)

L A B O R A T O R 1a

Functii recursive

1. Functie recursiva pentru cautarea primei aparitii a unei valori date "b"
intr-un vector "a" de n elemente cu rezultat pointer: adresa valorii gasite sau
NULL daca nu exista.
int* first (int b, int a[], int n);

2. Functie recursiva echivalenta cu functia de biblioteca "strchr":


char* strchr (char* s, char c);
Indicatie: Se cauta prima aparitie a lui "c" in sirul (vectorul) "s".

3. Functie recursiva pentru determinarea celui mai mare divizor comun


a doi intregi "a" si "b" pe baza relatiei de recurenta:
cmmdc(a,b) = cmmdc (b, a%b) pentru b > 0
Sa se adauge apoi afisarea argumentelor la fiecare apel al functiei.

4. Functie recursiva, de tip "long", pentru calculul combinarilor de


"n" luate cate "k" folosind relatia de recurenta :
C(n,k) =1 pentru n=k sau k=0
C(n,k) = C(n,k-1) * (n-k+1)/k ptr k > 0 si k < n
Sa se adauge apoi numararea apelurilor functiei si afisarea lor in
"main", fara a folosi variabile externe functiilor (cu un parametru in plus).

5. Functie recursiva, de tip "long", pentru calculul combinarilor de


"n" luate cate "k" folosind relatia de recurenta :
C(n,k) =1 pentru n=k sau k=0
C(n,k) = C(n-1,k) + C(n-1,k-1) ptr k > 0 si k < n
Sa se adauge apoi numararea apelurilor functiei si afisarea lor in "main".

6. Functie pentru cautarea binara a unei valori date "b" intr-un vector ordonat
"a" de n elemente distincte cu rezultat intreg: pozitia lui "b" in "a" sau -1 daca
"a" nu contine pe "b":
int bsearch (int b, int a[], int n);

Se va apela o functie recursiva de cautare binara cu 4 argumente:


int bs (int b, int a[], int inf, int sup);
"inf","sup" sunt prima si ultima pozitie dintr-un subvector din 'a' unde se cauta
'b'

7. Functie recursiva pentru calculul valorii unui polinom cu n coeficienti


P(n)=c[0]*x^(n-1)+c[1]*x^(n-2)+...+c[n-2]*x+c[n-1] pentru o valoare data x:
int valpol( int c[], int n, int x) ;
Se va folosi relatia de recurenta:
P(n) = P(n-1)*x + c[n-1] ptr n>0 si P(0)=0

8. Functie recursiva echivalenta cu functia standard "atoi" dupa modelul


functiei "valpol":

int atoin(char*s, int n); // n=lungime sir s


Indicatie: Se va folosi aceeasi metoda de calcul din functia "valpol" deoarece
1234 = 1*10^3 + 2*10^2 + 3*10^1 = 4*10^0 deci P(4) cu x=10

9. Functie recursiva echivalenta cu functia standard "atoi" care sa apeleze


o varianta a functiei "valpol" (modificata astfel ca rezultatul sa fie corect).
int atoir (char*s); // conversie din sir ASCII in "int"

10. Functie recursiva pentru afisare unui sir in ordine inversa:


void rprint (char* s);

Functie recursiva pentru crearea unui sir t cu caractereledin s in ordine


inversa: void reverse (char*s, char*t);

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