Sunteți pe pagina 1din 16

Recursivitate – probleme

Recursivitate info.mcip.ro

1. [2009-11-17 - 12:36:17]
Sa se scrie o functie recursiva care primeste 3 parametri: n - numar natural,
c1,c2 cifre si returneaza numarul obtinut din n prin inlocuirea tuturor
aparitiilor cifrei c1 cu c2.
Ex. din n=2324, c1=2 si c2=5 returneaza 5354 Rezolvare
#include<iostream.h>
long schimba(long n, int c1, int c2)
{ if(n==0) return 0'
else if(n%10==c1) return schimba(n/10)*10+c2;
else return schimba(n/10)*10+n%10;
}
void main()
{
cout<<schimba(23362,2,4);
}

2. [2009-11-17 - 12:41:21]
Sa se scrie o functie recursiva care primeste un parametru n numar natural
si returneaza numarul obtinut din n prin scaderea cu 1 a cifrelor impare si
marirea cu 1 a celor pare.
Ex. din n=2324 returneaza 3235 Rezolvare
#include<iostream.h>
long schimba(long n)
{ if(n==0) return 0;
else if(n%2==1) return schimba(n/10)*10+n%10-1;
else return schimba(n/10)*10+n%10+1;
}
void main()
{
cout<<schimba(23362);
}

~ 1 din 16 ~
Recursivitate – probleme
3. [2009-11-17 - 12:47:17]
Sa se scrie o functie recursiva care primeste un parametru n numar natural
si returneaza numarul obtinut din n prin eliminarea cifrelor pare.
Ex. din n=23524 returneaza 35 Rezolvare
#include<iostream.h>
long sterge(long n)
{ if(n==0) return 0;
else if(n%2==1) return sterge(n/10)*10+n%10;
else return sterge(n/10);
}
void main()
{
cout<<sterge(23562);
}

4. [2009-11-17 - 13:05:39]
Sa se scrie o functie recursiva cu 2 parametri siruri de caractere care sa
determine daca sunt anagrame (sunt compuse din aceleasi litere, in alta
ordine).Rezolvare
#include<iostream.h>
#include<string.h>
int anagrame(char a[20], char b[20])
{ char *p;
if(strlen(a)!=strlen(b)) return 0;
else if(strcmp(a,b)==0) return 1;
else if(strchr(b,a[0])==0) return 0;
else
{ p=strchr(b,a[0]);
strcpy(a,a+1);
strcpy(p,p+1);
return anagrame(a,b);
}
}
void main()
{
cout<<anagrame("adina", "diana");
}

~ 2 din 16 ~
Recursivitate – probleme

5. [2009-11-17 - 13:10:41]
Sa se scrie o functie recursiva care calculeaza si returneaza suma cifrelor
unui numar natural primit ca parametru. Rezolvare
#include<iostream.h>
int sumacif(long n)
{ if(n==0) return 0;
else return sumacif(n/10)+n%10;
}
void main()
{
cout<<sumacif(23562);
}

6. [2009-11-17 - 13:19:44]
Sa se scrie o functie recursiva care primeste ca parametru litera 'A' si
afiseaza in ordine toate literele mari din alfabet. Rezolvare
#include<iostream.h>
void litere(char c)
{ if(c<='Z') { cout<<c<<" ";
litere(c+1);
}
}
void main()
{
litere('A');
}

7. [2009-11-17 - 13:54:15]
Sa se scrie o functie recursiva care sa afiseze descompunerea in factori primi
a unui numar natural. Rezolvare
#include<iostream.h>
void desc(int n, int d)
{ if(n>1)
if(n%d==0) { cout<<d<<" ";
~ 3 din 16 ~
Recursivitate – probleme
desc(n/d,d);
}
else desc(n,d+1);
}
void main()
{
desc(234,2);
}

8. [2010-02-08 - 21:30:30]
Sa se scrie o functie recursiva care primeste ca parametru un sir de
caractere format din cel mult 100 de caractere litere mici si elimina toate
vocalele din sir. Rezolvare
#include<iostream>
using namespace std;
void elimin(char a[100])
{
if(strlen(a)>0)
if(strchr("aeiou",a[0]))
{ strcpy(a,a+1);
elimin(a);
}
else elimin(a+1);
}
int main()
{ char a[100]="abracadabra";
elimin(a);
cout<<a;
system("pause");
return 0;
}

9. [2010-02-08 - 21:30:36]
Se citeste un vector a cu n elemente numere naturale. Sa se calculeze
elementul maxim din vector. Se va folosi o functie recursiva pentru citire si
una recursiva pentru determinarea elementului maxim. Rezolvare
~ 4 din 16 ~
Recursivitate – probleme
#include<iostream>
using namespace std;
int max(int a[100], int i, int j)
{
if(i==j) return a[i];
else { int m=(i+j)/2;
int m1=max(a,i,m);
int m2=max(a,m+1,j);
if(m1<m2) return m2;
else return m1;
}
}
void citire(int a[100], int n)
{
if(n>0) { citire(a,n-1);
cin>>a[n];
}
}
void afis(int a[100],int n)
{
if(n>0) { afis(a,n-1);
cout<<a[n]<<" ";
}
}
int main()
{
int n,a[100];
cin>>n;
citire(a,n);
afis(a,n);
cout<<max(a,1,n);
system("pause");
return 0;
}

10. [2010-02-08 - 21:30:42]


Sa se calculeze CMMDC al doua numele naturale folosind o functie
recursiva. Rezolvare

~ 5 din 16 ~
Recursivitate – probleme
#include<iostream>
using namespace std;
int cmmdc(int x, int y)
{ if(x%y==0) return y;
else return cmmdc(y,x%y);
}
int main()
{
cout<<cmmdc(15,55);
system("pause");
return 0;
}

11. [2010-02-08 - 21:30:48]


Sa se determine cifra maxima a unui numar natural folosind o functie
recursiva. Rezolvare
#include<iostream>
using namespace std;
int max(int n)
{ if ( n <= 9 ) return n;
else
{
int m = max(n/10);
if ( m > n%10 )
return m;
else
return n%10;
}
}
int main()
{
cout << max(23614);
system("pause");
return 0;
}

~ 6 din 16 ~
Recursivitate – probleme
12. [2010-02-08 - 21:30:59]
Sa se scrie o functie recursiva pentru calculul rasturnatului unui numar
natural. Rezolvare
#include<iostream>
using namespace std;
int rast(int n, int r)
{ if ( n == 0 ) return r;
else
return rast(n/10,r*10+n%10);
}
int main()
{
cout <<rast(23456,0);
system("pause");
return 0;
}

13. [2010-02-08 - 21:31:06]


Sa se scrie o functie recursiva care calculeaza cate cifre are un numar
natural. Rezolvare
#include<iostream>
using namespace std;
int NC(int n)
{
if ( n <= 9 ) return 1;
else
return NC(n/10)+1;
}
int main()
{
cout << NC(2405);
system("pause");
return 0;
}

~ 7 din 16 ~
Recursivitate – probleme
14. [2010-02-08 - 21:31:12]
Sa se scrie o functie recursiva pentru calculul primei cifre a unui numar
natural. Rezolvare
#include<iostream>
using namespace std;
int PC(int n)
{
if ( n <= 9 ) return n;
else
return PC(n/10);
}
int main()
{
cout << PC(2405);
system("pause");
return 0;
}

15. [2010-02-16 - 10:23:31]


Sa se scrie o functie recursiva care primeste un parametru n numar natural
si afiseaza:
1
12
123
.....
1 2 3 4 ... n Rezolvare
#include<iostream>
using namespace std;
void afis(int n)
{ if(n>0)
{
afis(n-1);
for(int i=1;i<=n;i++) cout<<i<<" ";
cout<<endl;
}
}
int main()
{
afis(6);

~ 8 din 16 ~
Recursivitate – probleme
return 0;
}

16. [2010-02-16 - 10:23:38]


Sa se scrie o functie recursiva care primeste un parametru n numar natural
si afiseaza:
1 2 3 4 ... n
...
123
12
1 Rezolvare
#include<iostream>
using namespace std;
void afis(int n)
{ if(n>0)
{
for(int i=1;i<=n;i++) cout<<i<<" ";
cout<<endl;
afis(n-1);
}
}
int main()
{
afis(6);
return 0;
}

17. [2010-02-16 - 10:27:09]


Sa se scrie o functie recursiva care primeste un parametru n numar natural
si afiseaza:
#
##
###
....
###...# Rezolvare
~ 9 din 16 ~
Recursivitate – probleme
#include<iostream>
using namespace std;
void afis(int n)
{ if(n>0)
{
afis(n-1);
for(int i=1;i<=n;i++) cout<<"#";
cout<<endl;
}
}
int main()
{
afis(6);
return 0;
}

18. [2010-02-16 - 10:29:33]


Sa se scrie o functie recursiva care primeste un parametru n numar natural
si afiseaza:
*
##
***
....
###...# daca n par
sau
***...* daca n impar Rezolvare
#include<iostream>
using namespace std;
void afis(int n)
{ if(n>0)
{
afis(n/10);
cout<<n%10<<" ";
}
}
int main()
{
afis(2316);

~ 10 din 16 ~
Recursivitate – probleme
return 0;
}

19. [2010-02-16 - 10:34:49]


Sa se scrie o functie recursiva care primeste un parametru n numar natural
si afiseaza cifrele sale in ordinea din el si separate prin cate un spatiu.
Rezolvare
#include<iostream>
using namespace std;
void afis(int n)
{ if(n>0)
{
afis(n/10);
cout<<n%10<<" ";
}
}
int main()
{
afis(2316);
return 0;
}

20. [2010-02-23 - 10:14:57]


Se citeste un vector cu n elemente numere naturale folosind o functie
recursiva. Sa se calculeze suma tuturor cifrelor din care sunt formate
elementele vectorului folosind doar functii recursive. Rezolvare
#include<iostream>
using namespace std;
int n, a[100];
void citire(int a[100], int n)
{
if(n>0)
{ citire(a,n-1);
cin>>a[n];
}
~ 11 din 16 ~
Recursivitate – probleme
}
int sumacif(int n)
{
if(n==0) return 0;
else return n%10+sumacif(n/10);
}
int suma(int a[100], int n)
{
if(n==0) return 0;
else return
suma(a,n-1)+sumacif(a[n]);
}
int main()
{
cin>>n;
citire(a,n);
cout<<suma(a,n);
return 0;
}

21. [2010-02-28 - 22:55:15]


Sa se calculeze recursiv suma 1 + 1/2 + 1/3 + ... +1/n. Rezolvare
#include<iostream.h>
using namespace std;
float suma(int n)
{ if (n==0) return 0;
else return suma(n-1) + 1.0/n;
}
int main()
{
cout<<suma(5);
system("pause");;
return 0;
}

~ 12 din 16 ~
Recursivitate – probleme
22. [2010-02-28 - 22:55:24]
Sa se calculeze recursiv suma 1*2 + 2*3 + ... + n*(n+1). Rezolvare

#include<iostream.h>
using namespace std;
int suma(int n)
{ if (n==0) return 0;
else return suma(n-1) + n*(n+1);
}
int main()
{
cout<<suma(3);
system("pause");;
return 0;
}

23. [2010-02-28 - 22:55:31]


Sa se calculeze recursiv suma
1/1 + 2/2 + 3/3 + 5/4 + 8/5 + ... + fib(n)/n
unde fib(n) este al n-lea termen din sirul lui Fibonacci. Rezolvare

#include<iostream.h>
using namespace std;
int fib(int n)
{ if(n==1 || n==2) return 1;
else return fib(n-1)+fib(n-2);
}
float suma(int n)
{ if (n==0) return 0;
else return suma(n-1) + (float)fib(n)/n;
}
int main()
{
cout<<suma(5);
system("pause");;
return 0;
}

~ 13 din 16 ~
Recursivitate – probleme

24. [2010-02-28 - 23:22:52]


Sa se calculeze recursiv suma primelor n patrate perfecte. Rezolvare
#include<iostream>
using namespace std;
int suma(int n)
{
if(n==0) return 0;
else return suma(n-1)+n*n;
}
int main()
{
int n;
cin>>n;
cout<<suma(n);
system("pause");
return 0;
}

25. [2010-02-28 - 23:23:00]


Sa se calculeze recursiv 2 la puterea n. Rezolvare

#include<iostream>
using namespace std;
int putere(int n)
{
if(n==0) return 1;
else return putere(n-1)*2;
}
int main()
{
int n;
cin>>n;
cout<<putere(n);
system("pause");
return 0;
}

~ 14 din 16 ~
Recursivitate – probleme

26. [2010-02-28 - 23:23:09]


Sa se calculeze recursiv de cate ori apare o valoare intreaga x intr-un vector
a cu n elemente intregi. Rezolvare
#include<iostream>
using namespace std;
int a[100],n,x;
int nrap(int n, int x)
{
if(n==0) return 0;
else if(a[n]==x) return 1+nrap(n-1,x);
else return nrap(n-1,x);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>x;
cout<<nrap(n,x);
system("pause");
return 0;
}

27. [2010-03-02 - 09:14:31]


Sa se scrie o functie recursiva care numara cate vocale mici are un cuvant
transmis ca parametru. Rezolvare
#include<iostream>
using namespace std;
int vocale(char s[20])
{
if(strlen(s)==0) return 0;
else if(strchr("aeiou",s[0])) return 1 + vocale(s+1);
else return vocale(s+1);
}
int main()
{ cout<<vocale("anamaria");
return 0;
}

~ 15 din 16 ~
Recursivitate – probleme

28. [2010-03-20 - 18:00:30]


Sa se calculeze recusiv suma
S=1/2+2/1+2/3+3/2+...+n/(n+1)+(n+1)/n. Rezolvare
#include<iostream>
using namespace std;
float suma(int n)
{ if (n==0) return 0;
else return suma(n-1) + (float)n/(n+1)+(float)(n+1)/n;
}
int main()
{ int n;
cin>>n;
cout<<suma(n);
system("pause");
return 0;
}

http://info.mcip.ro/?cap=Recursivitate

using namespace std;  "using namespace std" se foloseste pentru


compilatoarele din era noastra. Daca preferi sa nu-l scrii, o sa trebuiasca sa
zici "std::cout" in loc de "cout", mereu. Daca folosesti antichitatea borland
c++, nu ai nevoie de "using namespace std" si poti sa scrii doar "cout".
namespace  spatiu de nume  grupeaza in pachete, sub acelasi nume,
entitati cum ar fi: clase, obiecte, functii
system("pause");  acerasta instructiune are urmatorul efect: dupa afisarea
rezultatelor, fereastra de rulare DOS ramane deschisa pana cand se
introduce un caracter oarecare de la tastatura, permitand astfel vizualizarea
si interpretarea rezultatelor programului (in lipsa unei astfel de comenzi,
fereastra se inchide automat dupa rulare).

~ 16 din 16 ~

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