题目描述:
试编写一个递归函数,用来输出n个元素的所有子集。例如,三个元素{a,b,c}的所有子集是:{} (空集) , {a} , {b} , {c} , {a,b} , {a,c} , {b,c} , {a,b,c}。
问题分析:
既然是求子集,我们可以采用对其标记的思路,“1”表示输出,“0”表示不输出。(全为“1”则代表该子集全集,全为“0”则代表该子集为空集)
所以我们遍历所有元素,代码如下:
#include
<iostream>
#include "Header.h"
using namespace std ;
template < typename T>
#include "Header.h"
using namespace std ;
template < typename T>
void
f(T *a,
int
*mark,
int
n,
int
i)
{//a
为集合元素,
mark
为标记数组,
n
为起点,
i
为元素个数
if
(n==i)
{
cout << "{" ;
for ( int k= 0 ;k<i;k++)
{
if (mark[k]== 1 )
cout <<a[k];
}
cout << "}" << endl ;
{
cout << "{" ;
for ( int k= 0 ;k<i;k++)
{
if (mark[k]== 1 )
cout <<a[k];
cout << "}" << endl ;
return
;
}
mark[n]=0;
f(a,mark,n+1,i);
mark[n]=
1
;
f(a,mark,n+1,i);
}