[Algoritmi] Comprensione algoritmo

oleg.fresi
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.
#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
apatriarca
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.

oleg.fresi
Perfetto, seguirò il tuo consiglio. Grazie!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.