例如,三个元素的集合A = {a,b,c}的所有子集是:空集a,b,c,ab,ac,bc,abc,共八个

分析:

  对于集合A中的每个元素,在其子集中都可能存在或者不存在,所以A的子集有23种。

  可以设置一个变量IsExist,用来表示集合A中的某个元素是否存在于子集中,如果IsExist = 1,则表示存在,如果IsExist = 0,则表示不存在

  更近一步,可以想到设置一个数组IsExist[3],将数组IsExist与数组A中相同下标的元素绑定在一起。

  例如如果IsExist = {0,0,0},则A对应的子集为空集

  如果IsExist = {1,1,1},则A对应的子集为全集

  所以我们表面上是在求一个子集问题,实际上是在求一个关于IsExist的全排列问题,如图

  完全就是高中知识吧,现在的问题就变成了怎样求出这8个排列,肯定是用一个递归函数来求的

  也很容易想到,这个函数至少需要两个参数

void Func(int Arr(),int Index){}

  Arr()是用来记录排列结果的,Index用来记录当前处理的数组元素的下标

  我们先从下标为0的元素开始处理,Arr(0)有两种情况,分别为0和1,两种情况下又对应着下标为1的情况,接着又对应着下标为2的情况,此时递归就结束了,即递归的终点标志是当Index等于Arr()的末尾元素的下标时,故我们联想到此函数还需要一个参数用来记录Arr()的长度,我们命名为Len,所以递归函数的完整代码是:

 void Func(int Arr[], int Index, int Len)
{
if (Index == Len)
{
for (int i = ; i < Len; i++)
{
cout << Arr[i];
}
cout << endl;
}
else
{
Arr[Index] = ;
Func(Arr, Index + , Len);
Arr[Index] = ;
Func(Arr, Index + , Len);
}
}

主函数为

 int main()
{
int a[];
Func(a, , );
system("pause");
}

  写这个主函数主要是举个例子方便大家理解一下函数中参数的具体意义

  在这个基础上写出集合的子集就很简单了,在函数里多加一个参数就行,具体代码如下:

 #include<iostream>
using namespace std;
//n个元素的所有子集(递归函数)
template <typename T>
void Func(T Group[],int Arr[], int Index, int Len)
{
if (Index == Len)
{
cout << "{";
for (int i = ; i < Len; i++)
{
if (Arr[i] == )
{
cout << Group[i];
}
}
cout << "}" << endl;
}
else
{
Arr[Index] = ;
Func(Group,Arr, Index + , Len);
Arr[Index] = ;
Func(Group,Arr, Index + , Len);
}
} int main()
{
char group[] = { 'a', 'b', 'c' };
int a[];
Func(group,a, , );
system("pause");
}

使用递归函数用来输出n个元素的所有子集(数据结构、算法与应用)的更多相关文章

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

    题目描述: 请编写一个递归函数,用来输出n个元素的所有子集.例如,三个元素{a,b,c}的所有子集是:{},{a},{b},{c},{a,c},{ac},{b,c},{a,b,c}. 解题思路: 根据 ...

  2. 【C语言】求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素

    //求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素 #include <stdio.h> #include <string.h> int find_mi ...

  3. C++递归求解N个元素的所有子集

    C++递归求解N个元素的所有子集 引言: 我在复习C++遇到了设计递归函数的问题.这个例子,很好的显示了设计递归的方式,思想. 这与斐波那数列不同,这个例子更有应用意义. 问题: 试编写一个递归函数, ...

  4. SDUT OJ 顺序表应用3:元素位置互换之移位算法

    顺序表应用3:元素位置互换之移位算法 Time Limit: 1000 ms Memory Limit: 570 KiB Submit Statistic Discuss Problem Descri ...

  5. SDUT OJ 顺序表应用2:多余元素删除之建表算法

    顺序表应用2:多余元素删除之建表算法 Time Limit: 3 ms Memory Limit: 600 KiB Submit Statistic Discuss Problem Descripti ...

  6. 《Algorithms算法》笔记:元素排序(3)——洗牌算法

    <Algorithms算法>笔记:元素排序(3)——洗牌算法 Algorithms算法笔记元素排序3洗牌算法 洗牌算法 排序洗牌 Knuth洗牌 Knuth洗牌代码 洗牌算法 洗牌的思想很 ...

  7. 递归函数练习:输出菲波拉契(Fibonacci)数列的前N项数据

    /*====================================================================== 著名的菲波拉契(Fibonacci)数列,其第一项为0 ...

  8. python(序列递归)【输出原子级别元素。。。】

    晚上回去复习下原来的资料,返现Codebook中有个关于“展开一个嵌套序列”的话题. 任务说明:序列中的子项可能是序列,子序列的子项仍可能是序列,以此类推,则序列嵌套可以达到任意的深度.需要循环遍历一 ...

  9. 编写3个不同版本的程序,令其均能输出ia的元素

    #include<iostream> #include<vector> #include<string> using namespace std; int main ...

随机推荐

  1. 【linux学习笔记】

    网上看一个两小时突击linux的教程,就想补充一下linux的知识.想着一天抽出俩小时立马就能学完呢,结果乱七八糟的事情拖了四五天,实际完成某项任务的时间超出预期完成任务的两部不止.好了," ...

  2. 【转】早该知道的7个JavaScript技巧

    我写JAVAScript代码已经很久了,都记不起是什么年代开始的了.对于JavaScript这种语言近几年所取得的成就,我感到非常的兴奋:我很幸运也是这些成就的获益者.我写了不少的文章,章节,还有一本 ...

  3. 小程序的<label>标签

    用来改进表单组件的可用性. 使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件. for优先级高于内部控件,内部有多个控件的时候默认触发第一个控件. 目前可以绑定的控件 ...

  4. dp - LIS

    某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于 ...

  5. 解决.net core读取appSetting.json文件中文字符乱码

    如上所诉 vs菜单栏中  :工具 =>自定义 => 命令 =>添加命令 =>文件 =>找到高级保存选项点击 然后关闭,这时在visual studio界面就会有高级保存选 ...

  6. url的分发

    一.分发 补充:通过查看源码:可以通过二级路由include进行二次分发 位置:urls.py urlpatterns = [ path('admin/', admin.site.urls), pat ...

  7. 异数OS 星星之火(三)--异数OS-织梦师云 微服务编写入门

    . 异数OS 星星之火(三)–异数OS-织梦师云 微服务编写入门 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 6 ...

  8. MySQL军规升级版(转)

    一.基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读:(1)通用,无乱码风险,汉字3字节,英文1字节(2)utf8mb4是utf8的超集,有存储4字 ...

  9. THU的告诫

    究其原因,还是自己只会OI了.要成为一个合格的选手,是方方面面各个地方都要看的,同时也要自己去实现.快速实现.清晰实现.运行成功. 尤其是各种平时用的东西,不要只会技,还要研其道. 再次警醒,各位同我 ...

  10. centos7搭建hadoop2.10高可用(HA)

    本篇介绍在centos7中搭建hadoop2.10高可用集群,首先准备6台机器:2台nn(namenode);4台dn(datanode):3台jns(journalnodes) IP hostnam ...