Sunteți pe pagina 1din 2

Laborator 2 Recursivitate (II) 1) Se citesc de la tastatur un numr natural n, un vector a cu n elemente de tip ntreg, care conine i elemente duplicate,

, precum i un numr ntreg b, care este egal cu unul dintre elementele vectorului a. S se scrie o funcie recursiv pentru cutarea indexului ultimei apariii a numrului b n vectorul a. n cazul cnd numrul b nu apare n vectorul a, funcia recursiv ntoarce -1. Prototipul funciei recursive este: int last(int a[], int n, int b); 2) Se citesc de la tastatur un numr natural n, un vector a cu n elemente de tip ntreg, care conine i elemente duplicate, precum i un numr ntreg b, care este egal cu unul dintre elementele vectorului a. S se scrie o funcie recursiv care numr de cte ori apare numrul b n vectorul a. Prototipul funciei recursive este: int count(int b, int a[], int n); 3) Se citesc de la tastatur un numr natural n i un vector v cu n elemente de tip ntreg. Asupra vectorului se execut operaii de tiere, astfel nct vectorul v se njumateste, iar dac lungimea lui este un numr impar, atunci se elimin elementul din mijloc. Acest proces se repet asupra fiecrei jumti, pn la obinerea unui vector cu un singur element. S se afieze pe o singur linie toate elementele ce rmn dup aplicarea acestui proces. De exemplu, dac n = 7 i v = {1, 2, 3, 4, 5, 6, 7}, rezultatul este: 1 3 5 7 4) Se citesc de la tastatur un numr natural n i un vector v cu n elemente, care sunt numere naturale. S se scrie un program care construiete ali 2 vectori ce vor conine elementele din v, care sunt numere perfecte, respectiv pe cele care nu sunt numere perfecte. Un numr perfect este un numr care este egal cu suma divizorilor strict mai mici dect el. Programul va conine 2 funcii recursive: a) int divsSum(int n, int div); Funcia afl suma divizorilor lui n, iar div reprezint numrul curent care e verificat dac e divizor. La fiecare autoapel, div este sczut cu 1. Pentru a afla suma divizorilor unui numr natural n, apelul iniial va fi: int s = divsSum(n, n - 1);

b) void split(int v[], int n, int v1[], int &n1, int v2[], int &n2); De exemplu, dac n = 4 i v = {28, 21, 6, 10}, se obine v1 = {28, 6} i v2 = {21, 10} v1 va conine numerele perfecte, iar v2 restul numerelor din vectorul iniial Numere perfecte: 6 = 1 + 2 + 3 ; 28 = 1 + 2 + 4 + 7 + 14 5) S se scrie o funcie recursiv pentru a genera i afia pe ecran toate permutrile unui ir de caractere citit de la tastatur. De exemplu, pentru irul iniial abc, se obin irurile permutate: abc acb bac bca cba cab

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