You are on page 1of 19

Titlu

citirea si afisarea unui vector recursiv


functie recursiva numar prim
functie recursiva afisarea divizorilor unui numar
functie recursiva descompunere in factori primi
functie recursiva oglinditul unui numar
Functia Ackermann recursiv
numar in baza b recursiv
cmmdc recursiv
sirul lui Fibonacci recursiv
suma cifrelor recursiv
cautare in vector
suma elementelor pare
maximul a n componente
suma n/((n+1)(n+2)
suma 1/n
suma n*(n+1)
combinari
suma a n componente

citirea si afisarea unui vector recursiv


Sa se se citeasca si sa se afiseze elementele unui vector folosind functii recursive.
#include<iostream.h>
{
int n,a[20];
void citire(int i)
{
if(i!=0) citire(i-1);
cin>>a[i];
}
void scriere(int i)
{
if (i !=0) scriere(i-1);
cout<<a[i]<<" ";
}
void main()
{
cin>>n;
citire(n-1);
scriere(n-1);
}

functie recursiva numar prim


numar prim

Sa se scrie o functie recursiva care sa verifice daca un numar n citit de la tastatura este prim sau
nu.
#include<iostream.h>
int prim(int n,int d)
{
if(d==1) return 1;
else
if(n%d==0) return 0;
else
return prim(n,d-1);
}
void main()
{
cin>>n;
if(prim(n,n/2)==1) cout<<"este prim";
else cout<<"nu este prim";
}

functie recursiva afisarea divizorilor unui numar


Sa se scrie o functie recursiva care sa afiseze divizorii unui numar citit de la tastatura.
#include<iostream.h>
void divizori(int n,int d)
{
if( d<=n/2)
{
if (n%d==0) cout<<d<<" ";
divizori(n,d+1);
}
}
void main()
{
int n;
cin>>n;
divizori(n,2);
}

unctie recursiva descompunere in factori primi


Sa se scrie o functie recursiva care sa realizeze descompunerea unui numar in factori primi
#include<iostream.h>
void desc(int n,int,d,int p)
{
if(n>1)
if(n%d==0) desc(n/d,d,p+1);
else
{
if (p!=0) cout<<d<<" la puterea "<<p<,endl;
desc(n,d+1,0);
}
else if (p!=0) cout<<d<<" la puterea "<<p;
}
void main()
{
int n;
cin>>n;
desc(n,2,0);
}

functie recursiva oglinditul unui numar


oglindit

Scrieti o functie recursiva care calculeaza inversul (oglinditul) unui numar n citit de la
tastatura
#include<iostream.h>
int inv(int n, int o)
{ if ( n == 0 ) return o;
else
return inv(n/10,o*10+n%10);
}
void main()
{
cin>>n;
cout <<inv(n,0);
}

Functia Ackermann recursiv

#include<iostream.h>
long ack(unsigned x, unsigned y)
{
if(x==0) return y+1;
if(y==0) return ack(x-1,1);
return ack(x-1,ack(x,y-1));
}
void main()
{
unsigned m,n;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
cout<<ack(m,n);
}

numar in baza b recursiv


Sa se scrie o functie recursiva pentru a transforma un numar natural n, din baza 10 in baza b
#include<iostream.h>
int n,b;
void baza(int n,int b)
{
int r=n%b;
if(n>=b) baza(n/b,b);
cout<<r;
}
void main()
{
cout<<"n=";cin>>n;
cout<<"b=";cin>>b;
baza(n,b);
}

cmmdc recursiv
cmmdc

Sa se afle cmmdc pentru 2 numere utilizand varianta recursiva


#include<iostream.h>
int a,b;
int cmmdc(int a,int b)
{
if(a==b) return a;
else
if (a>b) return cmmdc(a-b,b);
else return cmmdc(a,b-a);
}
void main()
{
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"cmmdc: "<<cmmdc(a,b);
}

sirul lui Fibonacci recursiv


Fibonacci

Sirul lui Fibonacci


Se citeste n.Sa se calculeze termenul de ordin n al sirului lui Fibonacci in varianta recursiva
#include<iostream.h>
int n;
int f(int n)
{
if(n==0) return 0;
else if(n==1) return 1;
else return f(n-1)+f(n-2);
}
void main()
{
cout<<"n=";cin>>n;
cout<<"termenul de ordin "<<n<<" este: "<<f(n);
}

10

suma cifrelor recursiv


suma cifre

Sa se scrie o functie recursiva pentru a calcula suma cifrelor unui numar


#include <iostream.h>
int n;
int s(int n)
{
if(n==0) return 0;
else return n%10 + s(n/10);
}
void main()
{
cout<<"n=";cin>>n;
cout<<"suma cifrelor: "<<s(n);
}

11

cautare in vector
#include<iostream.h>
#include<conio.h>
typedef int vector[20];
int n;vector v;
int e(int n, int x)
{
if (n==0) return 0;
else
if (v[n]==x) return 1;
else return e(n-1,x);
}
void main()
{
int x,i;
cout<<"n=";cin>>n;
cout<<"x=";cin>>x;
for(i=1;i<=n;i++) {cout<<"v["<<i<<"]=";cin>>v[i];}
if (e(n,x)) cout<<"este"<<endl;
else cout<<"nu este";
getch();
}

12

suma elementelor pare


//suma elementelor pare
#include<iostream.h>
#include<conio.h>
typedef int vector[20];
int n;vector v;
int suma(int n)
{ if (n==0) return 0;
else return suma(n-1) + (v[n]%2==0)*v[n];
}
void main()
{
cout<<"n=";cin>>n;
for(int i=1;i<=n;i++)
{cout<<"v["<<i<<"]=";cin>>v[i];}
cout<<suma(n)<<endl;
getch();
}

13

maximul a n componente
maxim

Maximul unui vector


#include<iostream.h>
#include<conio.h>
typedef int vector[20];
int n;vector v;
int maxim(int n)
{int max;
if (n==1) return v[1];
else
{
max=maxim(n-1);
if (max<v[n]) return v[n];
else return max;
}
}
void main()
{
cout<<"n=";cin>>n;
for(int i=1;i<=n;i++)
{cout<<"v["<<i<<"]=";cin>>v[i];}
cout<<maxim(n)<<endl;
getch();
}

14

suma n/((n+1)(n+2)
//1/(2*3)+2/(3*4)+...(n/((n+1)(n+2))
#include<iostream.h>
#include<conio.h>
float e(int k)
{
return (float)k/((k+1)*(k+2));
}
float s(int k)
{
if
(k==1) return (float)1/(2*3);
else return e(k)+s(k-1);
}
void main()
{
int n;
cout<<"n=";cin>>n;
cout<<s(n)<<endl;
getch();
}

15

suma 1/n
//1+1/2+...1/n
#include<iostream.h>
#include<conio.h>
float e(int k)
{
if (k==1) return 1;
else return (float)1/k+e(k-1);
}
void main()
{
int n;
cout<<"n=";cin>>n;
cout<<e(n)<<endl;
getch();
}

16

suma n*(n+1)
//1*2+2*3+..+n*(n+1)
#include<iostream.h>
#include<conio.h>
int p(int k)
{
return k*(k+1);
}
int s(int k)
{
if (k==0) return 0;
else return p(k)+s(k-1);
}
void main()
{
int n;
cout<<"n=";cin>>n;
cout<<s(n)<<endl;
getch();
}

17

combinari
//combinari
#include<iostream.h>
#include<conio.h>
long comb(int n,int k)
{
if (k==0) return 1;
else if (k>n) return 0;
else return (comb(n-1,k)+comb(n-1,k-1));
}
void main()
{
int k,n;
cout<<"n=";cin>>n;
cout<<"k=";cin>>k;
cout<<//"combinari de"<<n<<"elemente luate cate"<<k<<":"<<
comb(n,k)<<endl;
getch();
}

18

suma a n componente
//sa se calculeze suma componentelor unui vector cu n elemente
#include<iostream.h>
#include<conio.h>
typedef int vector[20];
int n;vector v;
int suma(vector v,int n)
{
if (n==0) return 0;
else return (v[n]+suma(v,n-1));
}
void main()
{
int i;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++) {cout<<"v["<<i<<"]=";cin>>v[i];}
cout<<"suma este"<<suma(v,n)<<endl;
getch();
}

19