用递归和位移进行枚举子集合

#include <stdio.h>
#define N 4
int arry[N];

void recursive (int a[], int n)
{
    if ( n == N)
    {
        int i;
        for(i = 0; i < N; ++i)
            printf("%d ",a[i]);
        printf("\n");
        return ;
    }
    a[n]=0;
    recursive(a, n+1);
    a[n]=1;
    recursive(a, n+1);
}

void bitShift (int a)
{
    for(int i = 0; i < N; ++i)
    {
        printf("%d ",a&1);
        a >>= 1;
    }
    printf("\n");
}


int main()
{
    printf("递归结果:\n");
    recursive(arry, 0);
    int i = 0;
    printf("位移结果:\n");
    for(i = 0; i< (1 << N); ++i) bitShift(i);
    return 0;
}

这里面我只用到了4个元素的集合,当然这里的元素个数是自己去定义的。

下面是程序运行的结果图:

用递归和位移进行枚举子集合_第1张图片


你可能感兴趣的:(递归,位移,枚举子集合)