Documente Academic
Documente Profesional
Documente Cultură
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;
}
~ 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;
}
~ 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;
}
~ 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;
}
~ 8 din 16 ~
Recursivitate – probleme
return 0;
}
~ 10 din 16 ~
Recursivitate – probleme
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;
}
#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
#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
~ 15 din 16 ~
Recursivitate – probleme
http://info.mcip.ro/?cap=Recursivitate
~ 16 din 16 ~