无法弄清楚如何更改我的代码来解决递归问题

时间:2019-10-04 19:29:10

标签: c recursion tree pascals-triangle binomial-coefficients

打印n元素集的k个元素子集(本质上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;
}

0 个答案:

没有答案