void Print(int array[],int isPrint[],int index,int right,int sum)
{
if(index>right && sum)
return;
if(sum==0)
{
for(int i=0;i<=right;i++)
{
if(isPrint[i]==1)
cout<<array[i];
}
cout<<endl;
return;
}
isPrint[index]=1;
Print(array,isPrint,index+1,right,sum-1);
isPrint[index]=0;
Print(array,isPrint,index+1,right,sum);
}
void PrintAll(int array[],int length)
{
int *isPrint=new int[length]();
for(int i=1;i<length;i++)
{
Print(array,isPrint,0,length-1,i);
}
}
int main()
{
int array[4]={1,2,3,4};
PrintAll(array,4);
}
要注意变量的命名,采用匈牙利命名法。递归要考虑退出的条件。
isPrint数组存放的是一个标志位,如果isPrint[i]==1,则第i个数在集合中,否则不在。