online: 9; azi: 655; total: 52661 Manual clasa a x a - Tehnici de implementarea algoritmilor - Recursivitate

Manual clasa a X a

Tehnici de implementarea algoritmilor

Recursivitate

Se citesc de la tastatură două numere naturale n şi m (n>=1, m>=1 şi n>=m). Să se genereze recursiv toate submulțimile cu m elemente ale mulțimii (1, 2, 3, ..., n).
Pentru a genera recursiv toate submulțimile cu m elemente ale mulțimii (1, 2, 3, ..., n), putem folosi următoarea strategie:
# include < iostream >
using namespace std ;
void generateSubmultimi ( int set[], int n, int submultime [], int index, int m) {
// verificam daca submultimea curenta are dimensiunea dorita
if (index == m) {
// afisam submultimea
for ( int i = 0 ; i < m; i++) {
cout << submultime [i] << " " ;
}
cout << endl ;
return ;
}
// parcurgem mulțimea
for ( int i = index; i < n; i++) {
submultime [index] = set[i];
// apelam recursiv cu submultimea modificata
generateSubmultimi (set, n, submultime , index + 1 , m);
}
// eliminam ultimul element adaugat
submultime [index] = 0 ;
}
int main () {
int n, m;
cout << " Introduceti n: " ;
cin >> n;
cout << " Introduceti m: " ;
cin >> m;
int set[n];
for ( int i = 0 ; i < n; i++) {
set[i] = i + 1 ;
}
int submultime [m];
generateSubmultimi (set, n, submultime , 0 , m);
return 0 ;
}

În acest program, mai întâi citim de la tastatură valorile n și m, apoi inițializăm mulțimea cu numerele de la 1 la n. Apelăm funcția generateSubmultimi pentru a genera toate submulțimile de dimensiune m ale acestei mulțimi și le afișăm.