C: Recursivitate - aplicatii rezolvate
1) Să se calculeze n! in varianta iterativa
(rezolvare...)
2) Să se calculeze n! in varianta recursiva
(rezolvare...)
3) Să se calculeze recursiv suma elementelor unui sir
(rezolvare...)
4) Scrieti o functie proprie care realizeaza calculul recursiv al sumei elementelor unui vector, de n
<=10, de nr reale. Scrieti functia main care citeste datele de la tastatura, calculeaza suma, utilizand functia recursiva anterior definita si afiseaza valoarea obtinuta
(rezolvare...)
5) Să se scrie un program C, pentru rezolvarea cmmdc-ului dintre două numere întregi fără semn (pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scăderi). Varianta iterativa
(rezolvare...)
6) Să se scrie un program C, pentru rezolvarea cmmdc-ului dintre două numere întregi fără semn (pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scăderi). Varianta recursiva
(rezolvare...)
7) Să se scrie un program C, pentru rezolvarea cmmdc-ului a n numere întregi fără semn (pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scăderi). Varianta recursiva
(rezolvare...)
8) Se considera urmatoarele declaratii şi conventii:
typedef int vector[20]; x – este un vector (sir de elemente) n – este lungimea sa (n>=1)
Se cere sa se scrie functii recursive pentru a determina, pentru un vector x de lungime n, urmatoarele:
(rezolvare...)
a. citirea componentelor sirului
b. afisarea elementelor din sir
c. suma componentelor
d. produsul componentelor
e. numarul componentelor negative
f. produsul componentelor pozitive
g. media aritmetica a elementelor
9) Sa se scrie o functie recursiva pentru determinarea sumei cifrelor unui numar natural
(rezolvare...)
10) Sa se scrie o functie recursiva pentru a transforma un numar natural n, din baza 10 în baza k
(1<k
<=10) (rezolvare...)
11) Se citeste x din Z . Se cere subprogramul pentru calculul functiei Manna-Pnuelli:
(rezolvare...)
x-1, x>=12
F(x)=
F(F(x+2)), x<12
12) Se considera sirul lui Fibonacci (Un) definit astfel:
0, n=0
Un= 1, n=1
Un-1+Un-2, altfel
Se citeste n, un numar natural. Sa se calculeze Un, in varianta iterativa
(rezolvare...)
13) Se considera sirul lui Fibonacci (Un) definit astfel:
0, n=0
Un= 1, n=1
Un-1+Un-2, altfel
Se citeste n, un numar natural. Sa se calculeze Un, in varianta recursiva
(rezolvare...)
Rezolvari
#include<stdio.h>
long int factorial (int n)
{
long int f=1;
for (int i=1; i<=n;i++)
f=f*i;
return f;
}
void main()
{
int n;
printf("Introduceti n= ");
scanf("%d", &n);
if(!n)
printf("0!=1\n");
else
printf("%d!=%ld\n",n,factorial(n));
getchar();
int var;
scanf("%d", var);
}
// factorial(3)=3*factorial(2)=3*2*factorial(1)=3*2*1
#include<stdio.h>
long int factorial (int n)
{
if (n==1) return 1;
else return n*factorial(n-1);
}
void main()
{
int n;
printf("Introduceti n= ");
scanf("%d", &n);
if(!n)
printf("0!=1\n");
else
printf("%d!=%ld\n",n,factorial(n));
getchar();
int var;
scanf("%d", var);
}
#include<stdio.h>
int suma(int n)
{
if (n==0) return 0;
else return (n + suma(n-1));
}
void main()
{
int n;
printf("Introduceti n: ");
scanf("%d", &n);
printf("Suma elementelor este %d\n",suma(n));
getchar();
int var;
scanf("%d", var);
}
#include <stdio.h>
#include <conio.h>
int a[10], n;
int Suma (int n, int a[10])
{
if(n==0) return 0;
else return(a[n]+Suma(n-1,a));
}
void main()
{ printf("Introduceti nr de elemente: ");
scanf("%d", &n);
for (int i=1; i<=n; i++)
{
printf("Elementul [%d] = ", i);
scanf("%d", &a[i]);
} printf("Suma = %d", Suma(n,a));
getch();
}
#include <stdio.h>
#include <conio.h>
unsigned int cmmdc(unsigned int a, unsigned int b)
{
while(a!=b)
{
if(a>b)
a=a-b;
else
b=b-a;
}
return a;
}
void main()
{
unsigned int x,y;
printf("Introduceti x: ");
scanf("%u",&x);
printf("Introduceti y: ");
scanf("%u",&y);
if(!x || !y) printf("cmmdc(%u,%u) = 1\n",x,y);
else
printf("cmmdc(%u,%u) = %u\n",x,y,cmmdc(x,y));
getch();
}
#include <stdio.h>
#include <conio.h>
unsigned int cmmdc(unsigned int a, unsigned int b)
{
if(a==b) return a;
else
if(a>b) return cmmdc(a-b,b);
else return cmmdc(a,b-a);
}
void main()
{
unsigned int x,y;
printf("Introduceti x: ");
scanf("%u",&x);
printf("Introduceti y: ");
scanf("%u",&y);
if(!x || !y) printf("cmmdc(%u,%u) = 1\n",x,y);
else
printf("cmmdc(%u,%u) = %u\n",x,y,cmmdc(x,y));
getch();
}
#include <stdio.h>
#include <conio.h>
unsigned int cmmdc_2(unsigned int a, unsigned int b)
{
if(a==b) return a;
if(a>b) return cmmdc_2(a-b,b);
else
return cmmdc_2(a,b-a);
}
unsigned int cmmdc_n(unsigned int x[], int n)
{
if (n==2) return cmmdc_2(x[0],x[1]);
else return cmmdc_2(cmmdc_n(x,n-1),x[n-1]);
}
void main()
{
unsigned int x[20];
int n;
printf("Introduceti n: ");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("elementul %d= ",i+1);
scanf("%u",&x[i]);
}
if (n==1)
printf("\nCmmdc-ul numerelor: %u",x[0]);
else
printf("\nCmmdc-ul numerelor: %u",cmmdc_n(x,n));
getch();
}
#include<stdio.h>
#include<conio.h>
typedef int vector[20];void citire(vector x,int n){ printf("\telementul %d: ",n);
scanf("%d",&x[n-1]);
if(n>=2)
citire(x,n-1);}void afisare(vector x,int n){ printf("%d ",x[n-1]);
if(n>=2)
afisare(x,n-1);}int suma(vector x,int n){
if(n==-1) return 0; else return x[n]+suma(x,n-1);
}int produs(vector x,int n)
{
if(n==-1) return 1;
else return x[n]*produs(x,n-1);
}int numar_negative(vector x,int n)
{if(n==0) return (x[n]<0); else return (x[n]<0)+numar_negative(x,n-1);
}int produs_pozitive(vector x,int n)
{
if(n==0) return (x[n]>0?x[n]:1);
else return (x[n]>0?x[n]:1)*produs_pozitive(x,n-1);
}float media(vector x, int m, int n){
return (float)x[m]/n + ((m!=0)?media(x,m-1,n):0);
}void main()
{
vector x; int n; printf("Dati numarul de elemente: ");
scanf("%d",&n);
printf("Introduceti elementele sirului:\n");
citire(x,n); printf("Sirul de elemente este: ");
afisare(x,n); printf("\nSuma elementelor: %d",suma(x,n-1)); printf("\nProdusul elementelor: %d",produs(x,n-1)); printf("\nNumarul elementelor negative: %d",numar_negative(x,n-1)); printf("\nProdusul elementelor pozitive: %d",produs_pozitive(x,n-1)); printf("\nMedia componentelor din sir: %.2f",media(x,n-1,n));
getch();
}
#include<stdio.h>
#include<conio.h>
int suma(int n)
{
if(!n) return 0; else return n%10+suma(n/10);
}
void main()
{
int n;
printf("Introduceti numarul: ");
scanf("%d", &n);
printf("Suma cifrelor numarului este: %d", suma(n));
getch();
}
#include<stdio.h>
#include<conio.h>
void transform(int n,int b)
{
int rest=n%b;
if (n>=b) transform(n/b,b);
printf("%d",rest);
}
void main()
{
int n,b;
printf("n="); scanf("%d",&n);
printf("baza="); scanf("%d",&b);
transform(n,b);
getch();
}
#include<stdio.h>
#include<conio.h>
int F(int x)
{
if (x>=12) return x-1;
return F(F(x+2));
}
void main()
{
int x;
printf("x="); scanf("%d",&x);
printf("Valoarea functiei este: %d",F(x));
getch();
}
#include<stdio.h>
#include<conio.h>
void main()
{
int n,U0=0,U1=1,U2;
printf("n="); scanf("%d",&n);
if(!n) printf("%d",U0);
else
if (n==1) printf("%d",U1);
else
{
for (int i=2;i<=n;i++)
{
U2=U0+U1;
U0=U1;
U1=U2;
}
printf("%d",U2);
}
getch();
}
#include<stdio.h>
#include<conio.h>
int U (int n)
{
if (!n) return 0;
else if (n==1) return 1;
else return U(n-1)+U(n-2);
}
void main()
{
int n;
printf("Introduceti n=");
scanf("%d",&n);
printf("Valoarea sirului in n este: %d",U(n));
getch();
}