关闭

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

标签: 函数c语言递归遍历
1943人阅读 评论(0) 收藏 举报
分类:

题目描述:

试编写一个递归函数,用来输出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[n]=0;                       
      f(a,mark,n+1,i);                        
      mark[n]=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[n]=0;                       
      f(a,mark,n+1,i);                        
      mark[n]=1;             
      f(a,mark,n+1,i); 



这是《数据结构算法应用》中的一道课后题   作者的标准答案:http://www.mhhe.com/engcs/compsci/sahni/c1/E5.HTM




1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

使用递归函数,输出n个元素的所有子集

题目描述: 请编写一个递归函数,用来输出n个元素的所有子集。例如,三个元素{a,b,c}的所有子集是:{},{a},{b},{c},{a,c},{ac},{b,c},{a,b,c}. 解题...
  • u011391093
  • u011391093
  • 2015-03-22 15:49
  • 1029

输出全排列(递归&非递归)

递归算法: 假设总共有n个元素,其核心是:将每个元素放到余下n-1个元素组成的队列最前方,然后对剩余元素进行全排列,依次递归下去。 比如:1 2 3 首先将1放到最前方(跟第1个元素交换),然后...
  • prstaxy
  • prstaxy
  • 2012-11-04 22:59
  • 7447

使用递归输出1-100;9*9乘法表

递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。 递归算法解决问题的特点: (1) 递归就是在过程或函...
  • z_programmer
  • z_programmer
  • 2016-12-10 10:02
  • 1010

java递归实现N个数全排列输出

  • 2007-11-20 22:57
  • 2KB
  • 下载

返回某整数集合的所有子集

题目:《程序员面试金典(第5版)》
  • bupt8846
  • bupt8846
  • 2014-11-16 23:59
  • 520

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

试编写一个递归函数,用来输出n 个元素的所有子集。 #include "iostream" #include "vector" using namespace std; ...
  • luoyhang003
  • luoyhang003
  • 2014-09-22 14:09
  • 1865

输出n个整数的所有子集

  • 2012-02-04 10:03
  • 224KB
  • 下载

递归实现输出n个整数的全排列和所有子集

下面是用c++实现的输出n个整数的全排列# include #include using namespace std; void swap(int &a, int &b) { //交换a和...
  • liyongqi_
  • liyongqi_
  • 2017-04-22 17:38
  • 1981

笔记一:n个元素的所有排列递归算法

求n个元素的所有排列组合问题:给定n个元素,设序列为{a,b,c},求所有的排列组合。思路:每次递归,对组合的第一个元素排序。 代码:#include #include #include using...
  • u014033518
  • u014033518
  • 2016-04-24 16:57
  • 2569

从数组中取出n个元素的所有组合(递归实现)

Link:http://www.cnblogs.com/shuaiwhu/archive/2012/04/27/2473788.html 从数组中取出n个元素的所有组合(递归实现)
  • u012577123
  • u012577123
  • 2014-08-22 14:00
  • 2519
    个人资料
    • 访问:21438次
    • 积分:1963
    • 等级:
    • 排名:千里之外
    • 原创:182篇
    • 转载:7篇
    • 译文:0篇
    • 评论:0条