Sunteți pe pagina 1din 2

Laborator 3.

Recursivitate

1. Pentru o valoare naturală n citită de la tastatură, să se afişeze recursiv triunghiurile:


1 void afis(int nr_crt, int cate_nr_sunt_pe_linie)
{if (nr_crt <= cate_nr_sunt_pe_linie)
12 { cout<<nr_crt<<" ";
123 afis(nr_crt+1, cate_nr_sunt_pe_linie);
.......... }
1 2 3 ....n }
int main()
{cin>>n;
for(i=1;i<=n;i++)
{ afis(1,i); // afişează linia cu numărul de ordine i
cout<<endl; //numărul de la care începe afişarea este 1
} //pe linie sunt i numere de afişat
}
1 2 3....n
.....
123
12
1

2. Să se calculeze recursiv suma cifrelor pare existente în scrierea unui număr natural n.
Exemplu: n=1245 S=6

3. Se dau doi vectori x şi y, cu n numere naturale în fiecare. Să se calculeze S=x[1] y[1]+x[2]y[2]+ …+ +x[n]y[n].
Se va utiliza o funcţie recursivă care calculează a b.
Exemplu: n=3 x=(1, 3, 4) y=(5, 2, 2) S=15+32+42=26

4. Se dă un şir de n numere naturale. Să se scrie o funcţie recursivă care determină de câte ori apare o valoare
x în şirul dat.
Exemplu: n=5 V=(1, 2, 3, 2, 1) x=2 2 apariţii
Nerecursiv Recursiv
int aparitii() int aparitii(int i)
{int ap=0; /*recursivitatea va lua locul instrucţiunii for; din acest motiv contorul din for
for(int i=1 ;i<=n ;i++) apare ca parametru pentru funcţia recursivă; parametrul va indica la ce element
if (v[i]==x) ap++; din vector s-a ajuns cu parcurgerea */
return ap; { if (i>n) return 0; //condiţia de oprire;
} //s-a terminat vectorul de parcurs
else
if (v[i]==x) return 1+aparitii(i+1);
else return aparitii(i+1);
}
Dacă elementul curent este egal cu cel căutat, numărul de aparţii creşte cu o
unitate şi prin autoapelare se trece la elementul următor din vector; dacă
elementul curent este diferit de cel căutat doar se trece mai departe în vector,
autoapelând funcţia;
În funcţiile recursive nu se fac iniţializări în mod explicit pentru
variabile care calculează sume, produse etc; Fiind recursivă, funcţia se va
executa identic la fiecare iteraţie şi atunci variabila se va reiniţializa la fiecare
autoapelare, lucru nedorit.
În main se va apela cu aparitii(1); valoarea 1 indică numărul de ordine al
elementului din vector de unde începe parcurgerea.

5. Se citeşte un număr natural n. Să se determine dacă numărul este egal cu suma factorialelor cifrelor lui. Se
va scrie o funcţie recursivă care calculează factorialul unui număr natural.
Exemplu: n=145 DA (145=1!+4!+5!)
n=146 NU
Laborator 3. Recursivitate
6. Se dă un şir de n numere naturale. Să se determine recursiv câte din numerele din şir sunt prime cu o
valoare x dată. Se va scrie şi o funcţie recursivă care calculează cmmdc a două numere, folosind algoritmul
lui Euclid prin împărţiri.
Exemplu: n=5 V=(10, 20, 3, 25, 12) x=4 2

7. Se dă un şir de n numere naturale. Să se determine recursiv suma numerelor pătrate perfecte din şir.
Exemplu: n=5 V=(10, 20, 4, 25, 12) 29

8. Să se verifice, folosind o funcţie recursivă dacă un şir de n numere întregi conţine numai numere negative.
Exemplu: n=5 V=(-1, -2, -3, -2, -1) DA
V=(-1, 2, -3, 2, -2) NU

9. Se citesc n cuvinte. Să se afişeze fiecare cuvânt aşa cum a fost citit şi cu literele inversate. Se va folosi o
funcţie recursivă care afişează un cuvânt cu literele inversate.
Exemplu: c=abac  caba

10. Scrieţi o funcţie recursivă care să returneze valoarea 1 dacă numărul întreg n, transmis ca parametru este
o putere a lui 2 şi 0 în caz contrar.
Exemplu: n=32 1
n=33 0

11. Scrieţi o funcţie recursivă care determină dacă un număr natural n este prim.

12. Scrieţi o funcţie recursivă cu rezultat 1 dacă şi numai dacă elementele unui vector sunt în ordine
crescătoare şi 0 în caz contrar.
Exemplu: n=5 V=(10, 20, 4, 25, 12) 0
n=5 V=(10,20, 40, 250, 1200) 1

13. Scrieti o funcţie iterativă şi una recursivă care calculează produsul A*B executând numai operaţii de
adunare. A şi B sunt numere naturale.
Exemplu: A=5 B=12 60

14. Scrieţi o funcţie recursivă care să returneze al n-lea termen din şirul lui Fibonacci.
Exemplu: n=7  13
int f(int n)
{
if(n==1) return 1; //primul termen din şirul lui Fibonacci este 1
else if(n==2) return 1; //al doilea termen din şirul lui Fibonacci este 1
else return f(n-1)+f(n-2);
//de la al treilea, fiecare termen este suma precedenţilor 2
}

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