Sunteți pe pagina 1din 3

Fișă de probleme – subprograme recursive

Scrieţi rezolvări recursive pentru următoarele probleme:

1. Să se scrie un program care transformă un număr natural n, din baza 10 în baza b (1<b<10).
Exemplu. Pentru n=327, b=2 se obţine 101000111.

2. Să se scrie o funcţie recursivă care verifică dacă un număr întreg este prim sau nu.
Exemplu. Numărul n=1291 este prim.

3. Se introduce de la tastatură un vector x=(x[1],x[2],…,x[n]) cu n componente numere naturale


cu cel mult 9 cifre. Să se afişeze suma
P(x[1])+P(x[2])+…+P(x[n])

unde P(a) este prima cifră a numărului a. Se va folosi o funcţie recursivă care returnează prima cifră a
unui număr natural de tip longint.
Exemplu. Pentru n=3 şi vectorul x=(538,16,94) suma este 15.

4. Să se scrie un program care calculează cel mai mare divizor comun a două numere folosind o funcţie
recursivă ce implementează algoritmul lui Euclid.
Exemplu. cmmdc(17182,24684)=242 sau cmmdc(13455,12435)=15.

5. Se dă un număr natural n. Să se determine dacă n este un palindrom (egal cu răsturnatul său),


utilizând un subprogram recursiv.
Exemplu. 12321, 5, 22, sunt numere palidroame.

6. Fie x, y două şiruri de caractere. Scrieţi un program recursiv care să testeze dacă şirul y este o
anagramă a şirului x.
Exemplu. Şirurile ‘abcd’ şi ‘dabc’ sunt anagrame.

7. O persoană are de coborât n trepte. La fiecare pas el poate coborî 1 sau 2 trepte. Să se determine câte
posibilităţi are persoana de a coborî scara.
Exemplu. Pentru n=12 există 233 de variante de a urca scările.

8. Se consideră două tablouri unidimensionale: a de lungime n şi b de lungime m, ale căror elemente


naturale sunt ordonate crescător. Să se realizeze subprogramul recursiv Inter care realizează operaţia de
interclasare a elementelor celor două tablouri în vectorul c. Subprogramul va avea trei parametri
valoare i, j, k. Primii doi reprezintă, în ordine, poziţiile elementelor din a repectiv din b, care se compară
la pasul curent. Parametrul k indică poziţia pe care este plasat elementul minim în vectorul c.
Considerăm că cele trei tablouri şi lungimile lor sunt declarate gobal. Exemplu: Pentru n=5, m=3 şi
tablourile a= (1, 4, 5, 7, 8), b= (2,17,18), subprogramul Inter plasează elementele în vectorul c în
ordinea (1,2,4,5,7,8,17,18).

9. Considerăm un şir de n valori naturale (n<50), reţinute în tabloul unidimensional a. Realizaţi


subprogramul recursiv Cm, care determină cifra maximă ce apare în scrierea în baza 10 a tuturor
elementelor vectorului a şi numărul de apariţii ale acesteia. Ambele rezultate vor fi returnate prin
intermediul a doi parametri. În cadrul subprogramului se va face apel la alte două subprograme
recursive:
 funcţia Mx, care determină cifra maximă a unei valori transmise ca parametru;
 funcţia Nr, care primeşte două valori întregi prin parametri x şi c. Aceasta returnează numărul de apariţii
al cifrei c în numărul x.
Scrieţi definiţiile complete ale celor trei subprograme. Vectorul a şi lungimea n a acestuia sunt considerate
variabile globale. Exemplu: Pentru n=5 şi vectorul a=(121, 38, 183, 7, 8), subprogramul Cm va returna, prin
cei doi parametric, cifra 8 şi valoarea 3 reprezentând numărul ei de apariţii.
Fișă de probleme – subprograme recursive

10. Scrieţi un subprogram recursiv care, primind printr-un parametru un număr natural strict pozitiv n,
afişează pe ecran 2*n-1 linii conţinând caractere sub forma următoare:
Exemplu: Pentru n=3 se va afişa:
*
**
***
**
*

11. Scrieţi o procedură recursivă TRIM care elimină toate spaţiile dinaintea şi de după un text dat. De
exemplu TRIM( CMPT 81 ) returnează şirul CMPT 81.
12. Să se scrie un program care descompune un număr dat n ca sumă de puteri distincte ale lui 2.
p
Indicaţie. Se va folosi o procedură care determină cea mai mare valoare p cu proprietatea că 2 ≤n .

Exemplu. Pentru n=4978 se obţine descompunerea 21+24+25+26+28+29+212.

13. Să se completeze în spirală, folosind o procedură recursivă, o matrice cu n linii şi n coloane cu primele
n2 numere întregi cu cel puţin 2 cifre, având cu proprietatea că suma cifrelor lor este divizibilă cu 5.

( )
14 19 23 28
69 73 78 32
64 87 82 37
Exemplu. Pentru n=4 se obţine matricea
55 50 46 41 .

14. Scrieţi o procedură recursivă care descompune un număr întreg dat în factori primi.
Exemplu. 19344=24*3*13*31.

15. Să se scrie un program recursiv pentru determinarea şi afişarea valorilor din triunghiul lui Pascal până
la nivelul k. Amintim că triunghiul lui Pascal este format din coeficienţii binomului lui Newton (a+b)n
pentru n=1,2,...,k.
Exemplu. Pentru k=5 triunghiul este
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

16. Scrieţi un program recursiv care să implementeze următorul algoritm. Umple un tablou de caractere
cu o serie de pătrate concentrice de X-uri. Fiecare pătrat trebuie să aibă latura cu patru caractere mai
mică decât pătratul în care va fi încadrat (vezi figura). Procedura recursivă folosită primeşte ca
parametru poziţia primei şi ultimei coloane a celui mai mare pătrat. Nici un pătrat nu va avea latura
mai mică de 4.
X X X X X X X X X X X X
X X
X X X X X X X X X X
X X X X
X X X X X X X X
X X X X X X
X X X X X X
X X X X X X X X
X X X X
X X X X X X X X X X
X X
Fișă de probleme – subprograme recursive

X X X X X X X X X X X X

17. Fie şirul 1,2,3,4,5,10,20,40,… ai cărui termeni, începând cu al şaselea, satisfac relaţia ai=2ai-1.
Să se scrie un algoritm recursiv care descompune un număr pozitiv n ca sumă de numere distincte din
şirul definit mai sus.
Exemplu. Pentru n=4578 se obţine descompunerea

n=3+5+10+80+640+1280+2560.

18. Se ştie că din numărul 4 se poate obţine orice număr natural N scris în baza 10 prin aplicarea
următoarelor operaţii:
a) se scrie la sfârşit cifra 4

b) se adaugă la sfârşit cifra 0

c) se împarte la 2 (dacă numărul este par).

Se cere să se scrie un program care produce un şir de numere construit conform regulilor precedente,
şir în care primul număr este 4 iar ultimul este N. Nu se va folosi nici un tip de date structurat (array,
string etc.)

Exemplu 4 → 2→1→ 14 → 140 →1404 → 702 →7024

Indicaţie. Se va folosi o procedură recursivă, iar şirul se va genera pornind invers de la N la 4, aplicând
transformările inverse. (de exemplu transformarea de la punctul a devine: se elimină cifra 4 de la
sfârşitul numărului)

19. Să se scrie un program care folosind recursivitatea roteşte cu 180 un tablou pătratic.

( ) ( )
1 2 3 4 16 15 14 13
5 6 7 8 12 11 10 9
9 10 11 12 8 7 6 5
Exemplu. Matricea
13 14 15 16 devine 4 3 2 1 .

20. Fie n un număr natural pozitiv. Să se genereze toate succesiunile de n (n<20) caractere ‘*’ şi ‘–‘.
Exemplu. Pentru n=3 şirurile sunt:
--- *--

--* *-*

-*- **-

-** ***

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