您的位置:首页 > 其它

写一个递归函数,用来输出n个元素的所有子集。

2016-06-01 15:07 267 查看

题目描述:

试编写一个递归函数,用来输出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<typenameT>
void
f(T *a,int
*mark,int
n,int
i)
{//a为集合元素,mark为标记数组,n为起点,i为元素个数

     
if(n==i)

      {

            cout<<"{";

            for(intk=0;k<i;k++)
     

            {
                 
if(mark[k]==1)
                       
cout<<a[k];
            }

            cout<<"}"<<endl;
           
return ;
      }                            

                                                                   
      mark
=0;                       

      f(a,mark,n+1,i);                        

      mark
=1;             
      f(a,mark,n+1,i);                         
 }                                  

int
main()

{

      int
mark[3];

      char
a[3]={'a','b','c'};

      f(a,mark,0,3);

}
编译结果如下:

{}

{c}

{b}

{bc}

{a}

{ac}

{ab}

{abc}

用图示更清晰

                                                              
      mark
=0;                       

      f(a,mark,n+1,i);                        

      mark
=1;             
      f(a,mark,n+1,i); 



这是《数据结构算法应用》中的一道课后题
  作者的标准答案:http://www.mhhe.com/engcs/compsci/sahni/c1/E5.HTM
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: