回顾大学--大二数据结构实验--实验一 递归练习
2012-02-04 10:23
260 查看
实验一 递归练习
一、实验目的1、熟悉开发工具的使用。
2、掌握递归的实现思想。
二、实验内容
1、输出n个整数的全排列。
2、输出n个整数的所有子集。
首先是安装开发工具:
Visual C++ 6.0(根据自己喜好)
百度搜索下载,我搜到的链接有:
下载地址1:Visual C++ 6.0 简体中文企业版集成SP6完美版
下载地址2:Visual C++ 6.0 简体中文企业版集成SP6完美版
——————————————————————————————————————————————————————————————————
下面是我的代码: 点此下载n个整数的全排列
——————————————————————————————————————————————————————————————————
一,输出n个整数的全排列。
下面是主要方法:
template<class T> void Perm(T list[],int k,int m) { int i; if(k==m) { for(i=0;i<=m;i++) cout<<list[i]; cout<<endl; } else for(i=k;i<=m;i++) { Swap(list[k],list[i]); Perm(list,k+1,m); Swap(list[k],list[i]); } }
这个方法叫排列方法perm:输出list的第k到m个元素的全排列
举例解释:
list为:abcd(元素为第0到第3,即a是第0个元素,b是第1个元素)
那么排列第1到第3(即bcd),perm后结果为:
abcd abdc acbd acdb adbc adcb
可以看出第0个元素a不变,第1到第3(即bcd)进行全排列,但是输出时也输出a。
如果perm方法理解后整个程序就差不多了。
下面就是递归思想:
1,如果需要排序的只有一个,如上述的abcd中需要排序的仅是最后的d,那么直接输出,即输出abcd。
2,否则,输出所有可能的第0个元素和后面的所有元素全排列,如上述的abcd,全排列为
第0个元素为a, 然后将bcd全排列 第0个元素为b, 然后将acd全排列 第0个元素为c, 然后将bad全排列 第0个元素为d, 然后将bca全排列
——————————————————————————————————————————————————————————————————
下面是我的代码: 点此下载n个整数的所有子集
——————————————————————————————————————————————————————————————————
主要的递归的方法如下:
void Set(char *s,int len,int bit) //递归主方法 { if(bit==len) { show(s); } else { char c=*(s+bit); *(s+bit)= '\0 '; //去掉第bit个元素 Set(s,len,bit+1); *(s+bit)=c; //再加上第bit个元素 Set(s,len,bit+1); } }
首先明确Set方法:输出s中第bit到第len-1个元素的子集,(这里跟上一个一样,都是给出一个起始位置,最后都到最后一个元素就行了)
举例解释:
s为abc(元素为第0到第2,即a是第0个元素,b是第1个元素), 输出第1到第2个元素(即bc)的子集:
输出结果为:
{} {b} {c} {bc}
下面是递归思想:
1,如果bit超过最后一个元素len-1,即bit==len了,那么输出空集
2,否则,想办法用n-1个元素的子集,来表示n个元素的子集。通过观察可以得到下面的递归关系:
n个元素子集为:每个n-1个元素子集加上第一个元素,再加上n-1个元素子集。 例如{abc}去掉第一个元素a为{bc},其子集为:{ } { b}{ c}{ bc} 子集加上第一个元素a为:{a} {ab}{ac}{abc} 这四个就是{abc}比{bc}多出来的子集 {abc}的子集为:{} {b} {c} {bc} ,{a} {ac} {ab} {abc} 。正好是上述两个的并集
对递归的看法:
递归难理解,我曾经妄想将所有的递归弄明白,搞透彻,后来只是将自己弄的心情郁闷。现在想想还是顺其自然,能想出来就算运气好,想不出来也不要强求。很多时候做数学题都会赞叹这解题方法是谁想出来的?普通人怎么能这样想到的呢?明显就是凑出来的啊!哈哈,不让自己钻牛角尖,保持快乐也不错啊!
相关文章推荐
- 回顾大学--大二数据结构实验--前言
- 回顾大学--大二数据结构实验--实验二 排序算法
- 数据结构实验3---二叉树的遍历(递归、非递归)
- 数据结构与算法练习-递归
- C语言 递推与递归 数据结构实验之排序八:快速排序
- 数据结构与算法回顾之递归
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 【线性表二:】大学数据结构实验报告中的两三个关于线性表的小算法
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- (编程训练)再回首,数据结构——二叉树的前序、中序、后序遍历(非递归)
- 数据结构实验之链表七:单链表中重复元素的删除
- SDUTOJ 2125 数据结构实验之串二:字符串匹配
- 数据结构实验之二叉树六:哈夫曼编码 oj
- 数据结构之队列基础练习
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验:哈希表
- 3400-数据结构实验之排序三:bucket sort
- 3398-数据结构实验之排序一:一趟快排
- 数据结构实验之链表一:顺序建立链表
- 数据结构实验之排序一:一趟快排