Sunteți pe pagina 1din 3

//1.

Construii o funcie recursiv care calculeaz aranjamente de n luate cate


unde n si k citite de la tastatura.
#include<stdio.h>
int aranjamente(int n,int k);
int main(void)
{
int n,k;
printf("Se vor calcula Aranajamente de n luate cate k.\n");
printf("n=");scanf("%d",&n);
printf("k=");scanf("%d",&k);
if(!((1<=k)&&(k<=n)))
{
printf("Pentru datele introduse, nu se poate calcula fact
orialul.");
return 1;
}
printf("Aranjamente de %d luate cate %d=%d",n,k,aranjamente(n,k));
}
int aranjamente(int n,int k)
{
if(k==1) return n;
else return n*aranjamente(n-1,k-1);
}
//2. Calcului combinari de n luate cate k printr-o functie recursiva
#include<stdio.h>
float combinari(int n,int k);
int main(void)
{
int n,k;
printf("Se vor calcula Combinari de n luate cate k.\n");
printf("n=");scanf("%d",&n);
printf("k=");scanf("%d",&k);
if(!((1<=k)&&(k<=n)))
{
printf("Pentru datele introduse, nu se pot calcula combin
arile.");
return 1;
}
printf("Aranjamente de %d luate cate %d=%d",n,k,(int)combinari(n,k)
);
}
float combinari(int n,int k)
{
if((n==0)||(k==0)||(n==k)) return 1;
else return (float)n/(n-k)*combinari(n-1,k);
}
//3.Calculul celui mai mare divizor comun a dou numere folosind o funcie
recursiv.
#include<stdio.h>
int cmmdc(int a,int b);
int main(void)
{
int a,b;
printf("Introduceti mai jos 2 numere. a si b.\n");
printf("a=");scanf("%d",&a);
printf("b=");scanf("%d",&b);
if(!((a>=0)||b>=0))
{
printf("Nu se poate calcula CMMDC pentru cele 2 numere."
);
return 1;
}
printf("CMMDC al celor 2 numere este:%d.\n",cmmdc(a,b));
return 0;
}
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);
}
}
//4.Se consider recursivitatea:
//an=(an-1+bn-1)/2 i
//bn=sqrt(an-1*bn-1+2), determinai an i bn, pentru n, a0, b0 introduse de
la tastatur.
#include<stdio.h>
#include<math.h>
double an(int n);
double bn(int n);
int a0,b0;
int main(void)
{
int n;
printf("Introduceti numerele:\n");
printf("n=");scanf("%d",&n);
printf("A0=");scanf("%d",&a0);
printf("B0=");scanf("%d",&b0);
printf("A%d=%f iar B%d=%f",n,an(n),n,bn(n));
return 0;
}
double an(int n)
{
if(n==0)return (double)a0;
else return (an(n-1)+bn(n-1))/2;
}
double bn(int n)
{
if(n==0) return (double)b0;
else return sqrt(an(n-1)*bn(n-1)+2);
}
//6.Determinai printr-o funcie recursiv produsul scalar a doi vectori.
#include<stdio.h>
int produs(int *a,int *b,int n);
int main(void)
{
int *a,*b,n;
printf("Introduceti dimensiunea vectorilor:");scanf("%d",&n);
a=new int[n];
b=new int[n];
for(int i=0;i<n;i++)
{
printf("a[%d]=",i);scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
{
printf("b[%d]=",i);scanf("%d",&b[i]);
}
printf("Produsul scalar a celor 2 vectori este:%d",produs(a,b,n));
}
int produs(int *a,int *b,int n)
{
if(n==0) return 0;
else return (a[n-1]*b[n-1]+produs(a,b,n-1));
}

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