- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
附件:
山东大学 计算机科学与技术 学院
数据结构与算法 课程实验报告
?
学号:
姓名:
班级: 2017级3班
实验题目:递归练习
实验学时:2
实验日期: 2018年9月29
实验目的:
1、熟悉开发工具的使用。
2、掌握递归的实现思想。
软件环境:
Dev-C++5.4.2
实验内容(题目内容,输入要求,输出要求)
1、键盘输入 n 和 n 个互不相同的整数,输出 n 个整数的全排列。
2、键盘输入 n 和 n 个互不相同的整数,输出 n 个整数的所有子集。
数据结构与算法描述 (整体思路描述,所需要的数据结构与算法)
键盘输入整数n,输入后申请相应大小空间来储存数组并再次从键盘输入数组每一个元素的值
构建两个函数来分别求并输出所有子集和数组全排列
全排列函数:运用已经建立的一个交换两数值的函数swap来交换数组中元素的位置达到改变元素排列顺序的目的。设置一个数组下标k,数组num,数组长度m作为函数的参数设置k的初始值为0,每次递归将k的值依次递增,直到k的值等于m则停止。
求E集合元素的全排列,令Ei表示从E中去除第i个元素的集合,令perm(X)表示集合X元素的全排列,ei.perm(Ei)表示在每个排列加上前缀ei后的排列表。当n=1时是递归的基础部分,当n1时,perm(E)是一个表:e1.perm(E1),e2.perm(E2)……en.perm(En)。这个定义是用n个集合perm(X)来定义perm(E),其中每个X包含n-1个元素,它成为递归步骤,既有基础部分又有递归部分,这是一个完整的递归定义。
所有子集:设立一个标志数组judge[],长度与num[]相同,元素一一对应,当对应元素值为1时代表该元素在子集中存在,若为零则表示其在子集中不存在,递归过程中分别得到相应的不同数组judge[],再根据judge的值来输出其子集
测试结果(测试输入,测试输出,结果分析)
分析与探讨(结果分析,若存在问题,探讨解决问题的途径)
调试完成后能满足实验要求来求并输出数组的所有子集以及全排列
代码仅针对整数型数组,可已通过改变函数参数类型等操作来达到输出其他类型数组的全排列和所有子集的目的。
附录:实现源代码(本实验的全部源程序代码,程序风格清晰易理解,有充分的注释)
#includeiostream
using namespace std;
void swap(int x,int y) //交换两数值的函数
{
int t=x;
x=y;
y=t;
}
void output_subset(int *num, int *judge, int n,int len) //生成子集并输出
{
if (n==len)
{
cout { ;
for (int i=0;ilen;i++)
{
if (judge[i]==1)
coutnum[i] ;
}
cout}endl;
return;
}
//else
judge[n]=0;
output_subset(num, judge, n + 1,len);
judge[n]=1;
output_subset(num,judge,n+1,len);
}
void output_arrange(int *list, int k, int m) //求并输出全排列的函数
{
if (k==m)//递归的基础部分
{
cout{ ;
for (int i=0;im;i++)
{
coutlist[i] ;
}
cout}endl;
}
else
{
for (int i=k;im;i++)
{
swap(list[k],list[i]);
output_arrange(list,k+1,m);
swap(list[k],list[i]);
}
}
}
int main()
{
int n;
int flag=0;
coutPlease input n:;
cinn;
int *num=new int
您可能关注的文档
- 2017未成年人教育保护大会发言稿.doc
- 2017小班组第一学期教研计划复习总结.doc
- 2017新版人教版英语四年级上册第五单元考试题.doc
- 2018.4-00115-中级财务会计考试试卷.docx
- 2018.5.24-科技工作复习总结.doc
- 2018.09.27教资考试专项学习——外国教育学家及主要思想.docx
- 2018.9学校校本培训课件计划.doc
- 2018-2018年点知教育六年级数学期中考试测评.doc
- 2018-2019(上)九年级上册课内重点词语.doc
- 2018-2019北师大版广东省XX实验中学九年级数学上册第一至第四章考试试卷C(11月).doc
- 2025新人教英语四年级上册Unit 6 Changing for the seasons Part B 第5课时 Let's learn&Do a survey 课件.ppt
- 2.问题提出(1) 课件 2025西师大版数学二年级上册.ppt
- 3.第1课时 画线段 课件 2025西师大版数学二年级上册.ppt
- 10.1 人类社会的存在和发展 课件 高教版中职思想政治哲学与人生.ppt
- 8.2 明辨是非,追求真理 课件 高教版中职思想政治哲学与人生.ppt
- 2025新人教英语四年级上册Unit 4 Helping in the community Part B 第6课时 Read and write 课件.ppt
- 2.问题提出(2) 课件 2025西师大版数学二年级上册.ppt
- 2025新人教英语四年级上册Unit 6 Changing for the seasons Part A 第3课时 Let's spell 课件.ppt
- 8.1 透过现象认识本质 课件 高教版中职思想政治哲学与人生.ppt
- 第2课时 年、月、日知多少 课件 2025西师大版数学二年级上册.ppt
文档评论(0)