C 使用递归的幂集

C 使用递归的幂集,c,powerset,C,Powerset,powerSet(a,i,curr,N)是错误的。此时,a的某些元素已添加到curr或以前使用过,并且无论哪种方式,都不再符合纳入条件。调用可以更改为功率集(a+i+1,x,curr,N-i-1),因此第一个和第四个参数描述了剩余要考虑的元素(第一个是指向它们开始位置的指针,第四个是它们的数量),第二个和第三个参数描述了当前在工作集中的元素(第三个是指向它们开始位置的指针,第二个是最后一个的索引,或−1(如果还没有) < >将代码的其余部分修改为此更改,删除“代码> >(index=n)和返回;

powerSet(a,i,curr,N)是错误的。此时,
a
的某些元素已添加到
curr
或以前使用过,并且无论哪种方式,都不再符合纳入条件。调用可以更改为
功率集(a+i+1,x,curr,N-i-1),因此第一个和第四个参数描述了剩余要考虑的元素(第一个是指向它们开始位置的指针,第四个是它们的数量),第二个和第三个参数描述了当前在工作集中的元素(第三个是指向它们开始位置的指针,第二个是最后一个的索引,或−1(如果还没有)


< >将代码的其余部分修改为此更改,删除“代码> >(index=n)<代码>和<代码>返回;<代码>(因为我们知道当代码< n>代码>为零时,我们已经完成了,表示没有必要考虑的元素,最后的循环将自然处理),并且将<代码>(int i=index + 1;i > > <代码>(int i=0;i
(因此我们循环考虑剩下的元素,这不涉及
索引)

在第一个循环中,条件
i是不相关的,但是为什么
int*curr=(int*)malloc(sizeof(int)*50)
而不是
int curr[50]
?…我的意思是
false
,但我确信您意识到我的意思是循环不会迭代。@Giridhar请您的问题添加请求的信息。而不是像“阵列的功率集”那样描述输出,请说明代码中示例数组的输出应该是什么样子。@Bodo:问题包含了足够的信息。
#include <stdio.h>

void powerSet(int* a, int index, int *curr, int N) {
    if (index == N)
        return;

    printf("(");
    for(int i = 0; i <= index; i++)
        printf("%d, ", curr[i]);

    printf(")\n");
    // processing here.


    int x = index + 1;
    for (int i = index + 1; i < N; i++) {

        curr[x]  = a[i];
        // curr += str[i];
        powerSet(a, i, curr, N);
    }
    return;
}

int main(){

    int a[] = {10,12,14,17};
    int *curr = (int*)malloc(sizeof(int) * 50);
    int n = 4;

    powerSet(&(*a),-1,curr,n);
}
() 
(10, )
(10, 12, )
(10, 12, 14, )
(10, 12, 14, 17, )
(10, 12, 17, 17, )
(10, 14, 17, )
(10, 14, 17, 17, )
(10, 17, 17, 17, )
(12, 17, )
(12, 17, 14, )
(12, 17, 14, 17, )
(12, 17, 17, 17, )
(14, 17, 17, )
(14, 17, 17, 17, )
(17, 17, 17, 17, )