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, )