L1b

2
Structuri de Date (1CC) L A B O R A T O R 1b Functii recursive 1. Functie recursiva pentru cautarea ultimei aparitii a unei valori date "b" intr-un vector "a" de n elemente cu rezultat pointer ( adresa valorii gasite ): int* last ( int a[], int n,int b); // NULL daca b nu exista in a 2. Functie recursiva echivalenta cu functia standard "strrchr": char* strrchr (char* s, char c); // ultima aparitie a lui c in s 3. Functie recursiva echivalenta cu functia standard "strcmp": int strcmp (char*a, char* b); // rezultat <0, ==0, >0 4. Functie recursiva echivalenta cu functia standard "strncmp": int strncmp (char*a, char* b,int n); // rezultat <0, ==0, >0 5. Functie recursiva echivalenta cu functia standard "strlen": int strlen (char* s); 6. Functie recursiva pentru ridicarea unui numar real la o putere intreaga folosind relatia a^n = a^(n-1)*a ptr n > 0 si a^0=1 Sa se verifice comparand cu rezultatul functiei standard "pow" din <math.h> Sa se adauge apoi afisarea numarului de apeluri ale functiei,in main, fara a folosi variabile externe (cu un argument suplimentar). 7. Functie recursiva pentru ridicarea unui numar real la o putere intreaga folosind relatiile: a^n = a^(n/2) * a^(n/2) ptr n par a^n = a^(n-1) * a ptr n impar Sa se adauge apoi afisarea numarului de apeluri ale functiei,in main, fara a folosi variabile externe (cu un argument suplimentar). 8. Numerele lui Fibonacci se calculeaza cu relatia de recurenta: F(n)= F(n-1)+F(n-2) si F(0)=F(1)=1; Sa se scrie o functie recursiva pentru calculul numarului F(n) si sa se verifice intr-un program care afiseaza primele 20 numere Fibonacci. Sa se afiseze si numarul de apeluri recursive pentru fiecare valoare n.

description

l2b

Transcript of L1b

Page 1: L1b

Structuri de Date (1CC)

L A B O R A T O R 1b

Functii recursive

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

2. Functie recursiva echivalenta cu functia standard "strrchr": char* strrchr (char* s, char c); // ultima aparitie a lui c in s

3. Functie recursiva echivalenta cu functia standard "strcmp": int strcmp (char*a, char* b); // rezultat <0, ==0, >0

4. Functie recursiva echivalenta cu functia standard "strncmp": int strncmp (char*a, char* b,int n); // rezultat <0, ==0, >0

5. Functie recursiva echivalenta cu functia standard "strlen": int strlen (char* s);

6. Functie recursiva pentru ridicarea unui numar real la o putere intreagafolosind relatia a^n = a^(n-1)*a ptr n > 0 si a^0=1 Sa se verifice comparand cu rezultatul functiei standard "pow" din <math.h> Sa se adauge apoi afisarea numarului de apeluri ale functiei,in main,fara a folosi variabile externe (cu un argument suplimentar).

7. Functie recursiva pentru ridicarea unui numar real la o putere intreagafolosind relatiile: a^n = a^(n/2) * a^(n/2) ptr n par a^n = a^(n-1) * a ptr n impar Sa se adauge apoi afisarea numarului de apeluri ale functiei,in main,fara a folosi variabile externe (cu un argument suplimentar).

8. Numerele lui Fibonacci se calculeaza cu relatia de recurenta: F(n)= F(n-1)+F(n-2) si F(0)=F(1)=1;Sa se scrie o functie recursiva pentru calculul numarului F(n) si sa se verificeintr-un program care afiseaza primele 20 numere Fibonacci.Sa se afiseze si numarul de apeluri recursive pentru fiecare valoare n.

9. Functie pentru determinarea unei radacini reale a unei ecuatii f(x)=0,cunoscand intervalul [a,b] in care se afla aceasta radacina,prin metoda injumatatirii repetate a intervalului, iterativ si recursiv: double sol (double a,double b, double eps, double (*f)(double));Indicatie: Se calculeaza x=(a+b)/2 si se compara semnele valorilor f(a) sif(x); in functie de rezultat se face x=a sau x=b. Se iese din functie cand|b-a| < eps sau cand |f(x)| < eps . Se va verifica pentru ecuatia x*x - c = 0 cu a=0,b=c,eps=0.0001 si se

Page 2: L1b

va compara cu rezultatul functiei sqrt(c).

10. Functie recursiva echivalenta cu functia standard "itoa", dar cunumai doua argumente: char* itoa (int x, char* s); // implicit baza 10

Indicatie: Este o conversie in zecimal (cu caractere ASCII ptr cifre zecimale) itoa(x)= itoa(x/10) conc (x%10+'0') // "conc"=concatenare caracter la un sir