online: 6; azi: 1270; total: 53276 Manual clasa a x a - Tehnici de implementarea algoritmilor - Recursivitate

Manual clasa a X a

Tehnici de implementarea algoritmilor

Recursivitate

Scrieţi un subprogram recursiv care să inverseze elementele unui vector în el însuşi.
# include <iostream>
using namespace std;
// Subprogram recursiv pentru inversarea elementelor unui vector
void inversare ( int v[], int st, int dr) {
if (st < dr) {
swap (v[st], v[dr]);
inversare (v, st+ 1 , dr -1 );
}
}
// Exemplu de utilizare a subprogramului de inversare
int main () {
int v[] = { 1 , 2 , 3 , 4 , 5 };
int n = 5 ;
cout << "Vectorul initial: " ;
for ( int i = 0 ; i < n; i++) {
cout << v[i] << " " ;
}
cout << endl;
inversare (v, 0 , n -1 );
cout << "Vectorul inversat: " ;
for ( int i = 0 ; i < n; i++) {
cout << v[i] << " " ;
}
cout << endl;
return 0 ;
}
Subprogramul inversare() primește un vector și două indici (începutul și sfârșitul intervalului de inversat) și aplică o inversare a elementelor între acești doi indici. Dacă indicii nu se intersectează, se face un swap între elementul din stânga și cel din dreapta și se continuă recursiv inversarea intervalului fără elementele aflate la margini. Când indicii se intersectează, subprogramul se termină.
O soluție pentru a inversa elementele unui vector fără a folosi funcția swap() este de a folosi o variabilă intermediară în care să stocăm temporar unul dintre elementele pe care vrem să le inversăm.
Iată cum arată subprogramul inversare() implementat astfel:
# include <iostream>
using namespace std;
// Subprogram recursiv pentru inversarea elementelor unui vector
void inversare ( int v[], int st, int dr) {
if (st < dr) {
int temp = v[st];
v[st] = v[dr];
v[dr] = temp;
inversare (v, st+ 1 , dr -1 );
}
}
// Exemplu de utilizare a subprogramului de inversare
int main () {
int v[] = { 1 , 2 , 3 , 4 , 5 };
int n = 5 ;
cout << "Vectorul initial: " ;
for ( int i = 0 ; i < n; i++) {
cout << v[i] << " " ;
}
cout << endl;
inversare (v, 0 , n -1 );
cout << "Vectorul inversat: " ;
for ( int i = 0 ; i < n; i++) {
cout << v[i] << " " ;
}
cout << endl;
return 0 ;
}

De această dată, se stochează elementul din poziția st într-o variabilă temp , se suprascrie elementul din poziția st cu elementul din poziția dr , iar apoi se suprascrie elementul din poziția dr cu valoarea din variabila temp .