例如,三个元素的集合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. C++ 动态数组与链表

    动态数组与链表 动态数组的大小不定,内存连续的,可以根据自己的需要,增加或删除元素.知道第一个元素的,那么就可以知道第二个元素,通过下标访问.如果中间插入一个元素,那么中间后面的元素的下标全部都要改变 ...

  2. 【Spark 内核】 Spark 内核解析-上

    Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spark内核原理,能够帮助我们更 ...

  3. 【转】7本免费的Java电子书和教程

    本文由 ImportNew - 唐小娟 翻译自 Javapapers.如需转载本文,请先参见文章末尾处的转载要求. 1. Thinking in Java (Third Edition) 本书的作者是 ...

  4. 从源码角度来看BeanFactory和ApplicationContext的关系

    大家好,我是小黑,这是年前的最后一篇推文,提前祝大家新年快乐~~ 这次我们从源码角度来聊聊BeanFactory和ApplicationContext的关系,讲一些网上文章不曾提到的点. 官方描述 先 ...

  5. Docker——WIN7 安装 Docker实战与入门

    1.Docker简介 Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Lin ...

  6. CTO说|非容器化应用怎么玩多云?Kubernetes不管我们管啊

    Kubernetes已经成为容器编排系统的事实标准,是现在主流的跨云容器化应用操作系统. 但是,Kubernetes的目标并不是容器本身,而是承载其上的应用,本质上是为了解决(容器化)应用上云这个难题 ...

  7. React Context 的用法

    在React的官方文档中,Context被归类为高级部分(Advanced),属于React的高级API,但官方并不建议在稳定版的App中使用Context. The vast majority of ...

  8. 史上最简约的vi教程,复制和粘贴

    上一篇博客,讲了"新手"如何"入门"vi,解决了"两眼一抹黑"的情况.知道在vi下如何进行基本的操作,如部署在Linux下的项目,修改配置文 ...

  9. 我终于学会了使用python操作postgresql

    一 前言 这篇文章不仅适合pgsql,更适合mysql,思路都是一致的,如果读者学会使用psycopg2操作pgsql,那么使用PyMySQL 操作mysql也是很简单:本篇文章涵盖内容广泛,提供的操 ...

  10. Scala 学习(4)之「类——基本概念2」

    目录 内部类 extends override和super override field isInstanceOf和asInstanceOf getClass和classOf 内部类 import s ...