Documente Academic
Documente Profesional
Documente Cultură
Principiul recursivităţii
#include<iostream>
using namespace std;
//varianta iterativa
long long factorial_i(int n)
{
long long f=1;
for(int i=1;i<=n;i++)
f*=i;
return f;
}
//varianta recursiva
/*
n!=| 1, daca n=1
| n*(n-1)!, daca n>1
exemplu: 3!=3*2!=3*2*1!=3*2*1
*/
long long factorial_r(int n)
{
if(n==1)
return 1;
return n*factorial_r(n-1);
}
int main()
{
int n;
do{
cout<<"Dati n: ";
cin>>n;
}while(n<0);
if(!n)
cout<<"0! = 1\n";
else
{
cout<<n<<"! = "<<factorial_i(n)<<" - iterativ\n";
cout<<n<<"! = "<<factorial_r(n)<<" - recursiv\n";
}
system("pause");
return (0);
}
1
// Aplicaţia 2. Determinarea lui cmmdc(a,b)
#include<iostream>
using namespace std;
//varianta iterativa
int cmmdc_i(int a, int b)
{
while(a!=b)
{
if(a>b)
a-=b;
else
b-=a;
}
return a;
}
//varianta recursiva
/*
cmmdc(a,b)=|a, daca a=b
|cmmdc(a-b,b), daca a>b
|cmmdc(a,b-a), daca a<b
*/
int cmmdc_r(int a, int b)
{
if(a==b)
return a;
if(a>b)
return cmmdc_r(a-b,b);
return cmmdc_r(a,b-a);
}
int main()
{
int a,b;
cout<<"Introduceti numerele:\n";
cout<<"\ta= ";
cin>>a;
a=abs(a);
cout<<"\tb= ";
cin>>b;
b=abs(b);
int c1,c2;
c1=cmmdc_i(a,b);
c2=cmmdc_r(a,b);
system("pause");
return (0);
}
2
// Aplicaţia 3. Determinarea lui cmmdc-ului unui sir de numere intregi
#include<iostream>
using namespace std;
//citirea vectorului
cout<<"Introduceti vectorul dorit\n";
do{
cout<<"\tdati dimensiunea (<=20): ";
cin>>n;
}while(n<2 || n>20);
cout<<"\tdati elementele:\n";
for(int i=0;i<n;i++)
{
cout<<"\t\telementul "<<i+1<<"= ";
cin>>x[i];
}
system("pause");
return (0);
}
3
//Aplicatie 4. Se citeste un sir de numere intregi, si se vor realiza operatii pe
acestea, toate realizate intr-o forma recursiva.
#include<iostream>
using namespace std;
#define dim 30
typedef int vector[dim];
//citirea sirului
void citire(vector v, int n, int i)
{
if (i == n)
return;
cout << "Introduceti elementul " << i + 1 << ": ";
cin >> v[i];
citire(v, n, i + 1);
}
//afisarea
void afisare(vector v, int n, int i)
{
if (i == n)
return;
cout << v[i] << ' ';
afisare(v, n, i + 1);
}
//cmmdc
int cmmdc2(int a, int b)
{
if (a == 0)
return b;
if (b == 0)
return a;
4
if (a == 1 or b == 1)
return 1;
if (a == b)
return a;
if (a > b)
return cmmdc2(a - b, b);
return cmmdc2(a, b - a);
}
int cmmdcN(vector v, int n)
{
if (n == 1)
return v[0];
if (n == 2)
return cmmdc2(abs(v[0]), abs(v[1]));
return cmmdc2(cmmdcN(v, n - 1), abs(v[n - 1]));
}
//suma si produsul
int suma(vector v, int n)
{
if (n == 0)
return 0;
return suma(v, n - 1) + v[n - 1];
}
int produs(vector v, int n)
{
if (n == 0)
return 1;
return produs(v, n - 1) * v[n - 1];
}
//minimul si maximul
5
int m = INT_MAX, M = INT_MIN;
int minim(vector v, int n)
{
if (n == 0)
return m;
if (v[n - 1] < m)
m = v[n - 1];
return minim(v, n - 1);
}
int maxim(vector v, int n)
{
if (n == 0)
return M;
if (v[n - 1] > M)
M = v[n - 1];
return maxim(v, n - 1);
}
#include<iostream>
using namespace std;
6
float termen_par(int n);
float termen_imp(int n)
{
if (n != 1)
return (termen_imp(n - 1) + termen_par(n - 1))/2.;
return t1;
}
float termen_par(int n)
{
if (n != 1)
return sqrt(termen_imp(n) *termen_par(n - 1));
return t2;
}
int main()
{
int n;
cout << "Dati primul termen din sir: ";
cin >> t1;
cout << "Dati al doilea termen din sir: ";
cin >> t2;
cout << "Numarul de elemente din sir este: ";
cin >> n;
system("pause");
return 0;
}