online: 7; azi: 1296; total: 53302 Manual clasa a x a - Tehnici de implementarea algoritmilor - Recursivitate

Manual clasa a X a

Tehnici de implementarea algoritmilor

Recursivitate

Se citeşte de la tastatură un număr natural n. Scrieţi un subprogram recursiv care generează toate permutările circulare ale mulțimii X= (1, 2, 3, .., n). Afişaţi aceste permutări.
# include < iostream >
using namespace std ;
void permutariCirculare ( int X[], int n, int i) {
if (i == n - 1 ) { // am ajuns la ultima poziție
for ( int j = 0 ; j < n; j++) {
cout << X[j] << " " ;
}
cout << endl ;
} else { // pentru fiecare poziție i, facem permutări circulare
for ( int j = i; j < n; j++) {
swap (X[i], X[j]); // schimbăm elementul de pe poziția i cu cel de pe poziția j
permutariCirculare (X, n, i + 1 ); // apelăm recursiv pentru poziția i+1
swap (X[i], X[j]); // refacem schimbul pentru a putea genera toate permutările
}
}
}
int main () {
int n;
cout << " Introduceti numarul n: " ;
cin >> n;
int X[n];
for ( int i = 0 ; i < n; i++) {
X[i] = i + 1 ;
}
cout << " Permutarile circulare ale multimii X = {" ;
for ( int i = 0 ; i < n - 1 ; i++) {
cout << X[i] << ", " ;
}
cout << X[n - 1 ] << "} sunt:\n" ;
permutariCirculare (X, n, 0 );
return 0 ;
}

În funcția permutariCirculare , verificăm dacă am ajuns la ultima poziție ( i == n - 1 ), caz în care afișăm mulțimea X . În caz contrar, facem toate permutările posibile pentru poziția i , prin interschimbarea elementelor de pe pozițiile i și j ( i ≤ j < n ) și apelând recursiv pentru poziția i + 1 . Pentru a putea genera toate permutările, refacem schimbul de elemente după apelul recursiv.
În funcția main , se citește de la tastatură numărul n și se inițializează mulțimea X cu valorile 1, 2, ..., n. Se apelează funcția permutariCirculare pentru mulțimea X .