30/11/16 17:26
TheDarkJuster
Se non sai passare da una funzione iterativa a una ricorsiva torna indietro e ristudia meglio.
In realtà l'esercizio è una stupidaggine, ti danno n, che è il numero di bit: tu fai un ciclo (implementato come ti pare) che va da 0 a 2^n-1.
quindi qualcosa del genere:
void stampaCombinazione(int n, int k = 0) {
if (k == pow(2,n))
return;
// qui stampi k in formato binario e vai a capo
stampaCombinazione(n, k + 1);
}
La chiamata alla funzione sarà qualcosa del genere:
stampaCombinazione(lunghezzaVettore);
Il codice fa schifo e non so neanche se sia compilabile, ma il concetto è sicuramente quello corretto.
Ultima modifica effettuata da TheDarkJuster 30/11/16 17:26
aaa
30/11/16 17:55
lumo
L'idea principale è questa, se hai ad esempio l'insieme di tutte le combinazioni di due cifre, {00, 01, 10, 11} allora quelle di tre cifre le ottieni aggiungendo davanti a tutte queste 0 e poi 1, e poi unendole: {000, 001, 010, 011} U {100, 101, 110, 111}
Come puoi notare generandole così puoi anche dimostrare per induzione che sono proprio 2^n, perché ogni volta ne aggiungi il doppio.
Il problema principale qui forse è la gestione della memoria, anche se non so bene se vuoi fare una funzione che ritorni qualcosa o semplicemente stampi tutto.
aaa
01/12/16 7:28
torn24
Personalmente prenderei spunto dal brute force per le password.
Trovare tutte le combinazioni di zero e uno, è come trovare le combinazioni di una password composta dai caratteri 0 e 1, e di lunghezza n.
aaa
01/12/16 14:57
Template
Postato originariamente da Lafa_96:
Ho cercato un po' in giro ma non ho trovato codice utile al mio scopo e non so più dove sbattere la testa
Il codice non si "cerca", si SCRIVE.
E se non sai scriverlo, vuol dire che non ci hai pensato abbastanza.
Possibile, banalissimo, algoritmo:
Funzione ricorsiva:
- Se hai finito le cifre, stampa
- Altrimenti:
---- Poni la k-esima cifra a zero
---- Richiama la funzione sulla (k+1)-esima
---- Poni la k-esima cifra a uno
---- Richiama la funzione sulla (k+1)-esima
- Return
Ultima modifica effettuata da Template 01/12/16 14:58
aaa