0% au considerat acest document util (0 voturi)
36 vizualizări8 pagini

Portofoliu Recursivitate

Încărcat de

mariussanda30
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
36 vizualizări8 pagini

Portofoliu Recursivitate

Încărcat de

mariussanda30
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

RECURSIVITATE:

1.Să se scrie o funcție C++ recursivă care returnează cel mai mare
divizor comun a două numere transmise ca parametri.

int cmmdc(int a, int b){


if(b == 0)
return a;
else return cmmdc(b, a % b);
}

Intrare:

12 4

Iesire:

[Link] dă un număr natural n. Să se genereze o matrice pătratică de


dimensiune 2n-1, după următoarele reguli:
● elementul din mijlocul matricii este egal cu n
● elementele de pe linia mediană și cele de pe coloana mediană
(exceptând elementul din mijlocul matricii) sunt nule
● folosind linia mediană și coloana mediană, se împarte
matricea în alte 4 matrici care se generează similar, dar au
dimensiunea 2n-1-1.

#include <iostream>
using namespace std;

int m[511][511];
void pat(int n, int L, int l, int c) {
L /= 2;
m[l][c] = n;
if (n > 1) {
int semiLatura = L / 2 + 1;
pat(n - 1, L, l - semiLatura, c - semiLatura);
pat(n - 1, L, l - semiLatura, c + semiLatura);
pat(n - 1, L, l + semiLatura, c - semiLatura);
pat(n - 1, L, l + semiLatura, c + semiLatura);
}
}

int main() {
int n;
cin >> n;
int L = pow(2, n) - 1;
pat(n, L, L / 2, L / 2);
for(int i = 0; i < L; i++) {
for(int j = 0; j < L; j++)
cout<<m[i][j]<<" ";
cout<<endl;
}
return 0;
}

Intrare:

Iesire:

1 0 1 0 1 0 1

0 2 0 0 0 2 0

1 0 1 0 1 0 1

0 0 0 3 0 0 0

1 0 1 0 1 0 1

0 2 0 0 0 2 0

1 0 1 0 1 0 1

3. Pentru o serie de activități foarte sofisticate, Gigel are nevoie


de un fierăstrău special, alcătuit din mai mulţi dinţi. Un fierăstrău
de gradul n este format din două fierăstraie de gradul n-1, între care
se află un dinte de mărime n. Un fierăstrău de gradul 1 are un singur
dinte, de mărime 1.
Afișați un fierăstrău de grad n.

#include <iostream>

using namespace std;

void dinti(int n){

if(n == 1) cout << 1;

else{
dinti(n-1);

cout << n << " ";

dinti(n-1);

int main(){

int n;

cin >> n;

dinti(n);

return 0;

Intrare:

Iesire:

1 2 1 3 1 2 1

4. Prietenul nostru, Ionci, a învățat la scoală despre ridicarea la


putere. Ajutați-l să calculeze a^b.

#include <iostream>

using namespace std;

long long int pow(int a, int b){

if(b != 0)

return a * pow(a, b-1);

else return 1;

int main()
{

int a, b;

cin>>a>>b;

cout<<pow(a, b);

return 0;

Intrare:

5 4

Iesire:

625

[Link] da un tablou de n elemente, unde număr de elemente n este citit


de la tastatura împreuna cu elementele tabloului. Sa se calculeze si
sa se afiseze produsul elementelor pare de pe poziții impare.

#include <iostream>

using namespace std;

int pv(int v[], int n){

if(n!=0)

(v[n]%2==0&&n%2)?return v[n]*pv(v, n - 1):return


1*pv(v,n-1);

else return 1;

int main()

{
int n, v[101];

cin>>n;

for(int i = 1; i <= n; i++)

cin>>v[i];

cout<<pv(v, n);

return 0;

Intrare:

4 4 5 3 6 7

Iesire:

24

6. Sa se afiseze elementele divizibile cu 3 dintr-un vector de n


elemente, citite de la tastatura.

#include <iostream>

using namespace std;

void suma(int a[], int n, int &s){

if(n!=0)

(a[n]%3 == 0)? s+=a[n], suma(a, n - 1, s) : suma(a, n -


1, s);

int main(){

int a[101], s = 0, n;
cin>>n;

for(int i = 1; i<=n;i++)

cin>>a[i];

suma(a, n, s);

cout<<s;

Intrare:

3 3 9 13 10

Iesire:

15

7. Sa se afiseze elementele care sunt divizibile cu suma cifrelor,


dintr-un tablou cu n elemente citit de la tastatura.

#include <iostream>

using namespace std;

int sumaCif(int x){

if(x!=0)

return x%10 + sumaCif(x/10);

void AfisareElem(int v[], int n){

if(n!=0)

(v[n]%sumaCif(v[n]) == 0)? cout<<v[n]<<" ", AfisareElem(v, n


- 1) : AfisareElem(v, n - 1);

int main(){
int a[101], n;

cin>>n;

for(int i = 1; i <= n; i++)

cin>>a[i];

AfisareElem(a, n);

Intrare:

10

27 101 47 36 98 45 13 54 55 63
Iesire:

27 36 45 54 63

8. Sa se afiseze elemente palindromice pare care se afla intr-un


tablou, cu n elemente citite de la tastatura.

#include <iostream>
using namespace std;
int palindrom(int x){
if(x!=0)
return x%10 + palindrom(x/10) * 10;
}
void AfisareElem(int v[], int n){
if(n!=0)
(v[n]%2 == 0 && v[n] == palindrom(v[n]))? cout<<v[n]<<" ",
AfisareElem(v, n - 1) : AfisareElem(v, n - 1);
}

int main(){
int a[101], n;
cin>>n;
for(int i = 1; i <= n; i++)
cin>>a[i];
AfisareElem(a, n);
}

Intrare:

5
101 87 32 22 11
Iesire:

22

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