一个不是很麻烦的递归函数,就可以把我给虐心了。

我还是很弱,在编程之路上,还有很多门槛等着我去跨越。

突然觉得这句话很适合我  “少年,你还有很长的路要走!!”

#include <iostream>  //《菜鸟学递归函数之全排列-被虐心了》
#define MAX 10       //这里定义了预编译器变量 MAX 代表 10
using namespace std; 
struct Set            //这里定义了一个透明类struct,它仅仅是为了保存一个数组
{
    int e[MAX];   
    int length;       //length的含义是e[MAX]中已填充的数据
} stack;              //在定义类Set的同时定义了它的对象stack,它是全局的供下面的递归函数操作
void fullArray(Set &set) //这个递归函数对目前没接触算法的我来说,姑且叫它虐心递归函数吧
{
    if(set.length==1)                       //明白这个递归函数想要看懂那位大哥给的递归算式,基本意思
    { //就是全排列是数字个数的阶乘n!n*(n-1)*(n-2)...
        for(int i=0; i<stack.length; ++i)   //回到递归,每当子序列的长度为一的时候,就达到一次递归探底,
            cout<<stack.e[i]<<',';          //也就是最后那个subset只有一个元素了,它的排列只有一种了,不
        cout<<set.e[0]<<'\n';               //需要再为它递归了。然后从栈输出目前的排列。
    }                                       //每次递归探底之后,才会执行之后的--stack.length;语句,这时
else                                        //把stack的顶层元素pop掉,拿其中一段过程来说,比如倒数两个subset
    {                                       //它们一个长度是2,一个是1,当回溯到第二个的时候,--stack.length
        for(int i=0; i<set.length; ++i)     //就执行了两次,把后面两个subset在stack里面的输入pop掉了,回溯多少层
        {                                   //就pop掉多少元素,如果返回到了第一次调用函数的时候,这时候stack里面
            stack.e[stack.length++] = set.e[i];//就只有一个元素了,那就是set.e[0],第一递归函数的for循环刚循环一次
            Set subset = set;                     //这时候++i,进行第二次循环。最外层的递归函数执行set.length次,
            subset.e[i]= subset.e[--subset.length];//再内一层的执行set.length-1次,依次减少,最内层执行一次,总共
            fullArray(subset);                  //执行set.length的阶乘次,每次探底都输出一个排列,于是所有的排列都
            --stack.length;                      //输出了。要理解递归函数,就在脑子里多自己推演一下递归展开跟
        }                                        //递归回溯发生的事情。
    }
}
int main(){    //主函数里没什么好解释的,都是些基本语句
Set s;          //创建了Set对象,后面把输入的数字放到它里面了,length是输入的数字个数
s.length = 0;
cout<<"Input\n";
while(1){
    int temp;
    cin>>temp;
    if(temp==0)
        break;
    s.e[s.length++] = temp; 
}
cout<<"Output\n";
fullArray(s);
cout<<"End\n";
::system("pause");
return 0;
}

少年,你还有很长的路要走!相关推荐

  1. 机器学习漫谈:还有很长的路要走

    来源:王宏琳科学网博客 链接地址:http://blog.sciencenet.cn/blog-3005681-1285948.html  人工智能已经成为大数据.机器人和物联网等新兴技术的主要驱动力 ...

  2. AI 识别抑郁症正确率高达八成,但AI+精神健康还有很长的路要走

    来源: 智能相对论(aixdlun) 近年来,"抑郁症"一词越来越多的被人们提起,不少名人如白岩松.崔永元等都曾表示陷入过抑郁症的痛苦,而抑郁症患者不堪病痛而自杀的新闻也屡见不鲜. ...

  3. 华为鸿蒙系统真的好吗,鸿蒙系统真的成熟吗?华为还有很长的路要走

    许多人认为,华为的产业发展规划尽管早已非常健全,但2020年发布鸿蒙手机的概率并不大.为了更好地搭建一个详细的系统软件生态体系,华为投入了许多精力.鸿蒙系统也代表着国产系统的风采,假如轻率发布,对华为 ...

  4. AI识别抑郁症正确率高达八成,但AI+精神健康还有很长的路要走

    请点击此处输入图片描述 文|颜璇 来源|智能相对论(aixdlun) 近年来,"抑郁症"一词越来越多的被人们提起,不少名人如白岩松.崔永元等都曾表示陷入过抑郁症的痛苦,而抑郁症患者 ...

  5. 关于竞赛,CSDN还有很长的路要走

    文章目录 前言 第三期 第四期 第五期 第六期 - 补更 优势与不足 总结 前言 CSDN 编程竞赛·第五期总结 AlbertS 41 52.5 52m36s 竞赛勋章 虽说这篇总结写在第五期之后,但 ...

  6. 物联网 长连接 服务器_为什么物联网还有很长的路要走

    物联网 长连接 服务器 It's IoT Week at SitePoint! All week we're publishing articles focused on the intersecti ...

  7. MobileMe还有很长的路要走

    http://areyouokme.blogspot.com/2008/09/mobileme.html MobileMe不值99$,如果用Mac的话,可能会好一点,不过我只有iphone.至少在中国 ...

  8. 方国伟:企业服务入云还有很长的路要走

    编者按:随着云计算的发展与落地,越来越多的企业开始制定自己的云计算发展战略.但对于如何构建企业云服务目前业界存在着不同的声音.本届ArchSummit2015深圳,InfoQ特别邀请到平安科技基础架构 ...

  9. 从语音识别到语义识别,中间还有多长的路要走?-模拟/电源-与非网

    最近科技圈刮起一股收购风,前面博通收购高通还在如火如荼的进行,这周苹果就宣布收购音乐识别软件 Shazam.Shazam 这个软件,通过手机麦克风收录音频片段,能够识别音乐.电影.电视节目甚至是广告. ...

最新文章

  1. Lock wait timeout exceeded; try restarting......
  2. mysql视图知识点_MySql知识点汇总--笔经面经
  3. linux体验服务器,体验Ubuntu做服务器
  4. OpenStack tokens id获取测试
  5. Golang教程:类型
  6. JavaScript创建对象:深入理解编程原理
  7. php同时使用了ssl tls,phpmqtt ssl tls使用证书 cafile 文件 连接服务器
  8. JS字符串截取(获取指定字符后面的所有字符内容)
  9. 2018年wine QQ最完美解决方案(多Linux发行版通过测试并稳定运行)
  10. android逆向 arm,[原创]Android下ARM静态反编译逆向.(小试多玩YY协议)
  11. 校验身份证、组织机构代码证、纳税人识别号、营业执照号 的方法
  12. H3C与阿里云网关建立IPSEC并启用BGP
  13. bypass最新版d盾mysql_D盾一句话动态代码执行拦截bypass
  14. PowerPoint 幻灯片 PPT 进度条 制作
  15. hadoop中带后缀的多路输出part文件
  16. 2022-08-15 第六小组 瞒春 学习笔记
  17. ENVI计算NDVI
  18. Decision Transformer 前沿追踪——万物皆可归于序列预测
  19. “我辞退了一位学位学历造假的程序员”
  20. 【中航机考测试感悟】

热门文章

  1. FFMPEG-avformat_open_input
  2. 我会写代码呀,为什么谷歌不要我?
  3. 根据Modbus通讯协议编写串口通讯
  4. 长沙软件测试前景好吗?薪资呢?
  5. echarts双正x轴条形图
  6. cocoapod 设置
  7. D题:手势识别装置 -- 2018年TI杯大学生电子设计竞赛
  8. PFC教程_pb模型
  9. Ubuntu查看系统版本信息
  10. 2022-2028全球与中国鼻部护理市场现状及未来发展趋势