[Algoritmi] Comprensione algoritmo
Buonasera! Ho questo algoritmo che usa la ricorsione per stampare coppie di numeri ad esempio, data la sequenza: 1, 2, 3, 4 e k = 2, vvengono stampati: 12, 13, 14, 23, 24, 34. Quello che non riesco a capire è l'idea dietro l'algoritmo, dao che la ricorsione è un po complicata da seguire.
Sapreste aiutarmi per favore a capire come effettivamente esegue quel compito?
#include <iostream> using namespace std; void print_combination(int* combination, int k) { int i; for (i = 0; i < k; i++) { cout << combination[i]; } cout << "\n"; } void find_all_combinations(int idx, int* in_use, int* combination, int n, int k) { int i; if (idx == k) { print_combination(combination, k); return; } for (i = 0; i < n; i++) { if (in_use[i]) { continue; } in_use[i] = 1; combination[idx++] = i + 1; find_all_combinations(idx, in_use, combination, n, k); combination[--idx] = 0; in_use[i] = 0; } } int main(void) { int in_use[8] = {0}; int curr_combination[3] = {0}; find_all_combinations(0, in_use, curr_combination, 8, 3); return 0; }
Sapreste aiutarmi per favore a capire come effettivamente esegue quel compito?
Risposte
Il mio consiglio per cercare di capire cosa succede in questo tipo di esercizi è quello di usare un debugger oppure di stampare tutti i tuoi argomenti e variabili prima e dopo la chiamata ricorsiva.
Perfetto, seguirò il tuo consiglio. Grazie!