Не могу понять, как изменить мой код для решения рекурсивной проблемы - PullRequest
1 голос
/ 04 октября 2019

Печать подмножеств k-элементов из набора элементов n (в сущности n выберите k) представляет каждое подмножество в виде массива и пропускает B[0].

Например, [0 1 0 1] означает {1,3} для печати. Я считаю, что моя главная проблема в моей printSubsets() функции, потому что я вызываю метод дважды.

Но похоже, что он не может этого сделать;он игнорирует «2» в индексе до самого конца программы.

Код

#include <stdio.h>
#include <stdlib.h>

void printSet(int B[], int n) {
    for(int j = 1; j <= n; j++) {
            printf("%d", B[j]);

    }
}

void printSubsets(int B[], int n, int k, int i) {
    if(i <= n) {
        if(k == 0) {
            printSet(B, n);
            printf("\n");
        }else{
            B[i] = 1; //print 1 in the index of interest and recurse
            printSubsets(B, n, k-1, i++);
            B[i] = 2; //print 2 as a holder to ignore that index
            printSubsets(B, n, k, i++);
        }
    }
}

int main(){
    int n;
    int k;
    scanf("%d %d", &n, &k);
    int B[101];
    printSubsets(B, n, k, 1);

    return EXIT_SUCCESS;
}
...