0% found this document useful (0 votes)
107 views8 pages

Exemple Algoritmi Recursivi PDF

The document provides examples of using recursion to: - Read and display a matrix using recursive functions - Implement selection sort recursively by comparing adjacent elements and swapping if out of order - Implement bubble sort recursively by recursively sorting all but the last element and stopping if fully sorted - Implement insertion sort recursively by recursively sorting all but the last element and inserting it in sorted position - Read a vector, and recursively construct and display two vectors - one with even elements and one with odd elements - Recursively delete an element from a vector at a given position by shifting elements - Recursively construct a vector with distinct elements from an input vector - Recursively modify a vector by removing all occurrences of the maximum digit
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
107 views8 pages

Exemple Algoritmi Recursivi PDF

The document provides examples of using recursion to: - Read and display a matrix using recursive functions - Implement selection sort recursively by comparing adjacent elements and swapping if out of order - Implement bubble sort recursively by recursively sorting all but the last element and stopping if fully sorted - Implement insertion sort recursively by recursively sorting all but the last element and inserting it in sorted position - Read a vector, and recursively construct and display two vectors - one with even elements and one with odd elements - Recursively delete an element from a vector at a given position by shifting elements - Recursively construct a vector with distinct elements from an input vector - Recursively modify a vector by removing all occurrences of the maximum digit
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

Exemple de algoritmi - Recursivitate

1.
Citirea si afisarea unei matrici folosind functii recursive.
#include <iostream>
using namespace std;

void citire(int A[][101], int n, int m, int i, int j)


{
if(i<=n)
{
cin>>A[i][j];
if(j<m) citire(A,n,m,i,j+1);
else citire(A,n,m,i+1,1);
}
}

void afisare(int A[][101], int n, int m, int i, int j)


{
if(i<=n)
{
cout<<A[i][j]<<" ";
if(j<m) afisare(A,n,m,i,j+1);
else
{
cout<<endl;
afisare(A,n,m,i+1,1);
}
}
}

int main()
{
int A[101][101],n,m;
cin>>n>>m;
citire(A,n,m,1,1);
afisare(A,n,m,1,1);
return 0;
}

2.
Sortare cu metoda selectiei - implementare recursiva (tabloul este indexat incepand cu 0)

#include <fstream>
using namespace std;
ifstream is("date.in");
ofstream os("date.out");

void rec(int a[], int n, int i, int j)


{
if(i<n-1)
{
if(a[i]>a[j]) {int aux=a[i]; a[i]=a[j]; a[j]=aux;}
if(j<n-1) rec(a,n,i,j+1);
else rec(a,n,i+1,i+2);
}
}

int main()
{
int a[100],n;
is>>n;
for(int i=0;i<n;i++)
is>>a[i];
rec(a,n,0,1);
for(int i=0;i<n;i++)
os<<a[i]<<" ";
is.close();
os.close();
return 0;
}

3.
Sortare cu metoda bulelor - implementare recursiva (tabloul este indexat incepand cu 0)

#include <fstream>
using namespace std;
ifstream is("date.in");
ofstream os("date.out");

void bule_rec(int a[], int n)


{
int gata=1;
for(int i=0;i<n-1;i++)
if(a[i]>a[i+1])
{
int aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;
gata=0;
}
if(!gata) bule_rec(a,n-1);
}

int main()
{
int a[100],n;
is>>n;
for(int i=0;i<n;i++)
is>>a[i];
bule_rec(a,n);
for(int i=0;i<n;i++)
os<<a[i]<<" ";
is.close();
os.close();
return 0;
}

4.
Implementati in mod recursiv algoritmul de sortare prin insertie.

#include<fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");

void sort(int a[100], int n)


{
if(n>1)
{
sort(a,n-1);
int i=n,aux;
while(a[i]<a[i-1] && i>1)
{ aux=a[i];
a[i]=a[i-1];
a[i-1]=aux;
i--;
}
}
}

int main()
{
int a[100], n,i;
fin>>n;
for(i=1;i<=n;i++) fin>>a[i];
sort(a,n);
for(i=1;i<=n;i++) fout<<a[i]<<" ";
fin.close();
fout.close();
return 0;
}

5.
Se citeste un vector a cu n elemente numere intregi. Construiti si afisati doi vectori b si c contruiti
astfel:
- vectorul b contine elementele pare din vectorul a
- vectorul c contine elementele impare din vectorul a
Se vor folosi functii recursive pentru citire si afisare, precum si pentru construirea celor doi vectori
ceruti.
Exemplu:
date.in
7
2579254
date.out
224
5795

#include <fstream>
using namespace std;

ifstream is("date.in");
ofstream os("date.out");

void citire(int a[], int n)


{
if(n>0)
{
citire(a,n-1);
is>>a[n];
}
}

void afisare(int a[], int n)


{
if(n>0)
{
afisare(a,n-1);
os<<" "<<a[n];
}
}

void split(int a[],int n,int b[],int &m,int c[],int &k)


{
if(n>0)
{
split(a,n-1,b,m,c,k);
if(a[n]%2==0)
b[++m]=a[n];
else
c[++k]=a[n];
}
}

int main()
{
int a[200],b[100],c[100],n,m=0,k=0;
is>>n;
citire(a,n);
split(a,n,b,m,c,k);
afisare(b,m);
os<<endl;
afisare(c,k);
is.close();
os.close();
return 0;
}

6.
Scrieti o functie recursiva care sterge elementul de la pozitia i dintr-un vector. Vectorul, numarul de
elemente si pozitia i se transmit ca parametri.

void del(int a[100], int &n, int i)


{
if(i==n) n--;
else
{ a[i]=a[i+1];
del(a,n,i+1);
}
}

7.
Se citeste un vector a cu n elemente numere intregi. Construiti un vector b care sa contina elementele
distincte din vectorul a. Toate prelucrarile vor fi realizate folosind functii recursive.

#include<fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");

void citire(int a[100], int n)


{
if(n>0)
{
citire(a,n-1);
fin>>a[n];
}
}

void afis(int a[100], int n)


{
if(n>0)
{
afis(a,n-1);
fout<<a[n]<<" ";
}
}

int cauta(int a[100], int n, int k)


{
if(n==0) return 0;
else if(a[n]==k) return 1;
else return cauta(a,n-1,k);
}

void distict(int a[100], int n, int b[100], int &k)


{
if(n>0)
{
distict(a,n-1,b,k);
if(!cauta(b,k,a[n]))
{
k++;
b[k]=a[n];
}
}
}

int main()
{
int a[100],b[100],k=0, n;
fin>>n;
citire(a,n);
distict(a,n,b,k);
afis(b,k);
fin.close();
fout.close();
return 0;
}

8.
Sa se stearga din fiecare element al unui vector toate aparitiile cifrei maxime. Se vor folosi functii
recursive pentru urmatoarele prelucrari:
- citirea elementelor vectorului
- determinarea cifrei maxime a unui numar
- stergerea tuturor aparitiilor unei cifre dintr-un numar
- parcurgerea vectorului si modificarea elementelor conform cerintei
- afisarea vectorului
Ex: 7
37 443 13 160 31 11 140
se vor afisa valorile: 3 3 1 10 1 0 10

#include<fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");

int cmax(int n)
{
if(n<=9) return n;
else if(cmax(n/10)>n%10) return cmax(n/10);
else return n%10;
}

int delcif(int n, int c)


{
if(n==0) return 0;
else if(n%10==c) return delcif(n/10,c);
else return delcif(n/10,c)*10+n%10;
}

void s(int a[100], int n)


{
if(n>0)
{
s(a,n-1);
a[n]=delcif(a[n],cmax(a[n]));
}
}

void citire(int a[100], int n)


{
if(n>0)
{
citire(a,n-1);
fin>>a[n];
}
}

void afis(int a[100], int n)


{
if(n>0)
{
afis(a,n-1);
fout<<a[n]<<" ";
}
}

int main()
{
int a[100],n;
fin>>n;
citire(a,n);
s(a,n);
afis(a,n);
fin.close();
fout.close();
return 0;
}

9.
Se citeste un vector cu n elemente numere naturale folosind o functie recursiva. Sa se calculeze suma
tuturor cifrelor din care sunt formate elementele vectorului folosind doar functii recursive.

#include<iostream>

using namespace std;


int n, a[100];
void citire(int a[100], int n)
{
if(n>0)
{ citire(a,n-1);
cin>>a[n];
}
}

int sumacif(int n)
{
if(n==0) return 0;
else return n%10+sumacif(n/10);
}

int suma(int a[100], int n)


{
if(n==0) return 0;
else return
suma(a,n-1)+sumacif(a[n]);
}

int main()
{
cin>>n;
citire(a,n);
cout<<suma(a,n);
return 0;
}

10.
Sa se scrie o functie recursiva care sa afiseze descompunerea in factori primi a unui numar natural.

#include<iostream.h>

void desc(int n, int d)


{ if(n>1)
if(n%d==0) { cout<<d<<" ";
desc(n/d,d);
}
else desc(n,d+1);
}
void main()
{
desc(234,2);
}

11.
Sa se scrie o functie recursiva care calculeaza si returneaza suma cifrelor unui numar natural primit ca
parametru.

#include<iostream.h>

int sumacif(long n)
{ if(n==0) return 0;
else return sumacif(n/10)+n%10;
}
void main()
{
cout<<sumacif(23562);
}

12.
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.

#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;
}

13.
Sa se calculeze recursiv suma primelor n patrate perfecte.

#include<iostream>

using namespace std;


int suma(int n)
{
if(n==0) return 0;
else return suma(n-1)+n*n;
}

int main()
{
int n;
cin>>n;
cout<<suma(n);
system("pause");
return 0;
}

You might also like