Sunteți pe pagina 1din 2

Test

Randul 2

1. Sa se scrie o functie recursiva care calculeaza cate cifre are un numar


natural.
int cate_cifre(int n) {
if (n < 10)
return 1;
return 1 + cate_cifre(n / 10);
}
2. Sa se scrie o functie recursive cu numele sterge care primeste un
parametru n numar natural si furnizeaza prin parametrul x numarul
obtinut din n prin eliminarea cifrelor impare.

Ex. In urma apelului sterge(63524, x) variabila x va fie gala cu 624

void sterge(int n, int& x)

if (n == 0) x = 0;

else if (n % 2 == 1) sterge(n / 10, x);

else{ sterge(n / 10, x); x = x * 10 + n % 10; }

3. Scrieți definiția completă a unui subprogram C++ recursiv care are 2 parametri: v, prin
care primeşte un tablou unidimensional cu maximum 100 de numere naturale mai mici
decât 1000, n, numărul efectiv de elemente ale tabloului si care returnează suma
elementelor divizibile cu 3 ale tabloului transmis ca parametru.

Restricţii şi precizări

● 0 < n ≤ 100
● numele subprogramului cerut este sum3
● parametrii sunt, în această ordine: v, n
● indicii elementelor vectorului v  sunt  0, 1 ,… , n-1.

Exemplu
Dacă n=6, x= (12, 7, 6, 3, 8, 5), rezultatul va fi 21.
int sum3(int V[], int n)
{
if (n > 0) {
if (V[n] % 3 == 0)
return V[n] + sum3(V, n - 1);
else
sum3(V, n - 1);
}
else return 0;
}

Punctaj: Se acorda 1p din oficiu si câte 3p pentru fiecare problema corect rezolvata (acest punctaj va
fi împărțit astfel: 0,5p pentru antet corect, 0,2p pentru corectitudine sintactica, 1p pentru tratarea
corecta a cazului cu rezultat imediat (conditia de oprire din recursivitate), 1,2p pentru construirea
corecta a rezultatului folosind autoapeluri ale functiei (autoapeluri care conduc la oprirea din rec).

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