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个数在集合中,否则不在。