少年,你还有很长的路要走!
一个不是很麻烦的递归函数,就可以把我给虐心了。
我还是很弱,在编程之路上,还有很多门槛等着我去跨越。
突然觉得这句话很适合我 “少年,你还有很长的路要走!!”
#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;
}
少年,你还有很长的路要走!相关推荐
- 机器学习漫谈:还有很长的路要走
来源:王宏琳科学网博客 链接地址:http://blog.sciencenet.cn/blog-3005681-1285948.html 人工智能已经成为大数据.机器人和物联网等新兴技术的主要驱动力 ...
- AI 识别抑郁症正确率高达八成,但AI+精神健康还有很长的路要走
来源: 智能相对论(aixdlun) 近年来,"抑郁症"一词越来越多的被人们提起,不少名人如白岩松.崔永元等都曾表示陷入过抑郁症的痛苦,而抑郁症患者不堪病痛而自杀的新闻也屡见不鲜. ...
- 华为鸿蒙系统真的好吗,鸿蒙系统真的成熟吗?华为还有很长的路要走
许多人认为,华为的产业发展规划尽管早已非常健全,但2020年发布鸿蒙手机的概率并不大.为了更好地搭建一个详细的系统软件生态体系,华为投入了许多精力.鸿蒙系统也代表着国产系统的风采,假如轻率发布,对华为 ...
- AI识别抑郁症正确率高达八成,但AI+精神健康还有很长的路要走
请点击此处输入图片描述 文|颜璇 来源|智能相对论(aixdlun) 近年来,"抑郁症"一词越来越多的被人们提起,不少名人如白岩松.崔永元等都曾表示陷入过抑郁症的痛苦,而抑郁症患者 ...
- 关于竞赛,CSDN还有很长的路要走
文章目录 前言 第三期 第四期 第五期 第六期 - 补更 优势与不足 总结 前言 CSDN 编程竞赛·第五期总结 AlbertS 41 52.5 52m36s 竞赛勋章 虽说这篇总结写在第五期之后,但 ...
- 物联网 长连接 服务器_为什么物联网还有很长的路要走
物联网 长连接 服务器 It's IoT Week at SitePoint! All week we're publishing articles focused on the intersecti ...
- MobileMe还有很长的路要走
http://areyouokme.blogspot.com/2008/09/mobileme.html MobileMe不值99$,如果用Mac的话,可能会好一点,不过我只有iphone.至少在中国 ...
- 方国伟:企业服务入云还有很长的路要走
编者按:随着云计算的发展与落地,越来越多的企业开始制定自己的云计算发展战略.但对于如何构建企业云服务目前业界存在着不同的声音.本届ArchSummit2015深圳,InfoQ特别邀请到平安科技基础架构 ...
- 从语音识别到语义识别,中间还有多长的路要走?-模拟/电源-与非网
最近科技圈刮起一股收购风,前面博通收购高通还在如火如荼的进行,这周苹果就宣布收购音乐识别软件 Shazam.Shazam 这个软件,通过手机麦克风收录音频片段,能够识别音乐.电影.电视节目甚至是广告. ...
最新文章
- Lock wait timeout exceeded; try restarting......
- mysql视图知识点_MySql知识点汇总--笔经面经
- linux体验服务器,体验Ubuntu做服务器
- OpenStack tokens id获取测试
- Golang教程:类型
- JavaScript创建对象:深入理解编程原理
- php同时使用了ssl tls,phpmqtt ssl tls使用证书 cafile 文件 连接服务器
- JS字符串截取(获取指定字符后面的所有字符内容)
- 2018年wine QQ最完美解决方案(多Linux发行版通过测试并稳定运行)
- android逆向 arm,[原创]Android下ARM静态反编译逆向.(小试多玩YY协议)
- 校验身份证、组织机构代码证、纳税人识别号、营业执照号 的方法
- H3C与阿里云网关建立IPSEC并启用BGP
- bypass最新版d盾mysql_D盾一句话动态代码执行拦截bypass
- PowerPoint 幻灯片 PPT 进度条 制作
- hadoop中带后缀的多路输出part文件
- 2022-08-15 第六小组 瞒春 学习笔记
- ENVI计算NDVI
- Decision Transformer 前沿追踪——万物皆可归于序列预测
- “我辞退了一位学位学历造假的程序员”
- 【中航机考测试感悟】