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

Manual clasa a X a

Tehnici de implementarea algoritmilor

Recursivitate

Să se genereze toate numerele binare cu n cifre care au m cifre de 0 şi restul cifrelor 1. Valorile pentru n şi m se citesc de la tastatură. Combinaţiile posibile de m cifre de 0 şi n-m cifre de 1 se vor genera recursiv. Din mulţimea de combinații posibile se vor alege numai acelea care pot forma un număr cu n cifre.
# include < iostream >
# include < string >
using namespace std ;
// functia recursiva care genereaza combinatiile de m cifre de 0 si n-m cifre de 1
void generateCombinations ( string & s, int n, int m, int index) {
if (index == n) {
// am generat o combinatie , verificam daca are m cifre de 0
int count = 0 ;
for ( int i = 0 ; i < n; i++) {
if (s[i] == '0' ) {
count ++;
}
}
if ( count == m) {
cout << s << endl ; // afisam combinatia
}
return ;
}
// setam cifra curenta la 0 si generam combinatiile pentru restul cifrelor
s[index] = '0' ;
generateCombinations (s, n, m, index + 1 );
// setam cifra curenta la 1 si generam combinatiile pentru restul cifrelor
s[index] = '1' ;
generateCombinations (s, n, m, index + 1 );
}
// functia principala
int main () {
int n, m;
cout << " Introduceti numarul de cifre n: " ;
cin >> n;
cout << " Introduceti numarul de cifre 0 m: " ;
cin >> m;
string s (n, ' ' ) ;
generateCombinations (s, n, m, 0 );
return 0 ;
}

Funcția generateCombinations primește un șir de caractere s , cu n elemente inițializate cu spații, care reprezintă o combinație posibilă de cifre 0 și 1. Argumentul m reprezintă numărul de cifre 0 care trebuie să apară în combinație. Argumentul index reprezintă poziția curentă din combinație care trebuie setată la 0 sau 1. Când index este egal cu n , s-a generat o combinație completă și se verifică dacă are m cifre de 0, caz în care se afișează combinația.
Funcția principală main citește valorile pentru n și m , inițializează un șir de caractere cu n elemente cu spații și apelează funcția generateCombinations cu argumentele corespunzătoare.
Exemplu de utilizare:
Introduceti numarul de cifre n: 4
Introduceti numarul de cifre 0 m: 2
0011
0101
0110
1001
1010
1100