




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二 递归算法设计与应用一. 实验目的和要求1. 加深对递归算法的理解,并针对具体问题设计算法; 2. 分析算法的复杂性,寻找比较高效的算法,并实现。3. 分析格雷码问题,并设计递归算法求解之。二. 基本原理递归是一种重要的程序设计方法。使用递归方法有时可使算法简洁明了,易于设计。递归指算法自己调用自己, 有直接递归与间接递归两种。递归方法用于解决一类满足递归关系的问题。即:对原问题的求解可转化为对其性质相同的子问题的求解。三. 该类算法设计与实现的要点1. 递归关系(特性):产生递归的基础。当算法中某步骤要通过解性质相同的子问题实现时,该步骤用递归调用实现。2. 递归出口(结束条件):确定
2、递归的层数。 当子问题的规模充分小时可直接求解时,递归结束。3. 参数设置:参数表示了原问题及其不同的子问题。参数表示了子问题的大小和状态,以区别原问题以及不同层次的子问题。4. 算法功能的设定:严格规定递归算法要解决什么样的问题。算法功能的正确设定是保证递归过程正确进行的前提。四. 实验内容格雷码问题1.问题描述对于给定的正整数n,格雷码为满足如下条件的一个编码序列:(1) 序列由2n个编码组成,每个编码都是长度为n的二进制位串。(2) 序列中无相同的编码。(3) 序列中位置相邻的两个编码恰有一位不同。例如:n=2时的格雷码为:00, 01, 11, 10。设计求格雷码的递归算法并实现。 2
3、. 具体要求(若在ACM平台上提交程序,必须按此要求)平台上1769题输入:输入的第一行是一个正整数m,表示测试例个数。接下来几行是m个测试例的数据,每个测试例的数据由一个正整数n组成。输出:对于每个测试例n,输出2n个长度为n的格雷码。(为方便查看,在每个格雷码内,两个位之间用一个空格隔开,如,00输出为:0 0)。两个测试例的输出数据之间用一个空行隔开,最后一个测试例后无空行。3. 测试数据输入:2 45输出:0 0 0 00 0 0 10 0 1 1 0 0 1 0 0 1 1 0 0 1 1 10 1 0 10 1 0 01 1 0 01 1 0 11 1 1 11 1 1 01 0
4、1 01 0 1 11 0 0 11 0 0 0 0 0 0 0 00 0 0 0 10 0 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 1 10 0 1 0 10 0 1 0 00 1 1 0 00 1 1 0 10 1 1 1 10 1 1 1 00 1 0 1 00 1 0 1 10 1 0 0 10 1 0 0 01 1 0 0 01 1 0 0 11 1 0 1 11 1 0 1 01 1 1 1 01 1 1 1 11 1 1 0 11 1 1 0 01 0 1 0 01 0 1 0 11 0 1 1 11 0 1 1 01 0 0 1 01 0 0 1 11
5、0 0 0 11 0 0 0 04. 设计与实现的提示长度为n的格雷码是由长度为n-1的格雷码变换而成的。可以用数组或字符串来存储格雷码。注意:对于较大的正整数n,用数组存储容易引起死机。按照定义2n个长度为n的格雷码序列是不唯一的,若在ACM平台上提交程序,要求输出的编码序列与给出的范例具有相同的规律。五、实验的运行程序方法一:#include<stdio.h>#include<sstream>#include <map>#include <iostream>#include <math.h>using namespace std;
6、char * P ;void GetNearest(int N) P=new charN+1;for(int i=0;i<N;i+)Pi='0'PN=0;cout<<P<<endl;for( i=0;i<N;i+)PN-i-1='1'cout<<P<<endl;for(int j=0;j<(int)pow(2.0,i)-1;j+) PN-j%i-1=PN-j%i-1='0'?'1':'0'cout<<P<<endl; void
7、 main() GetNearest(4);方法二:#include <iostream>#include <string>#include <cstdio>#include <string>#include <stack>#include <conio.h>using namespace std;/定义结点数据结构typedef struct CodeNode char *code; /格雷码串 struct CodeNode *next; /指向上一个码段的指针CodeNode, *CodeList;/函数声明void
8、 GenerateGrayCode( int n );CodeList CreateCodeList();void IncreaseCode( CodeList L );void PrintGrayCode( CodeList L );void ReleaseGrayCode( CodeList L );char *CodeCat( char *des, char *src );/定义全局变量CodeList L;void main() int nbits, array10; / char c;cin>>nbits;for(int i=0;i<nbits;+i)cin>
9、>arrayi;for(int k=0;k<nbits;+k)GenerateGrayCode( arrayk); /产生编码printf("n");PrintGrayCode( L ); /打印编码printf("n"); ReleaseGrayCode( L ); /释放内存void GenerateGrayCode( int n ) /算法主体 if(n = 1) L = CreateCodeList(); else GenerateGrayCode( n-1 ); IncreaseCode( L ); CodeList CreateC
10、odeList() /建立链表 CodeList Head = (CodeList)malloc(sizeof(CodeNode); CodeList p = (CodeList)malloc(sizeof(CodeNode); CodeList q = (CodeList)malloc(sizeof(CodeNode); p->code = "0" q->code = "1" p->next = q; q->next = NULL; Head->next = p; return Head;void ReleaseGrayC
11、ode( CodeList L ) /释放内存空间 CodeList q; while( L ) q = L; L = L->next; free(q); void IncreaseCode( CodeList L) /做编码的一位扩展 CodeList p; p = L; int count = 0; stack <char*> CodeStack; /定义栈 while( p->next ) CodeStack.push( p->next->code ); p->next->code = CodeCat("0",p->
12、;next->code ); p = p->next; count+; while( count > 0 ) CodeList q = (CodeList)malloc(sizeof(CodeNode); q->code = CodeCat( "1",CodeStack.top() ); CodeStack.pop(); q->next = NULL; p->next = q; p = p->next; count-; void PrintGrayCode( CodeList L ) /打印编码 CodeList p; p = L->next; while(p) cout<<p->code<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中学阅读考试题目及答案
- 第四节 受迫振动 共振教学设计-2025-2026学年高中物理选择性必修第一册沪科版(2020·上海专用)
- 广安协管员招聘面试题及答案
- 管理学试题及答案尔雅
- 4《弹簧测力计》教学设计-2024-2025学年教科版科学四年级上册
- 快乐读书吧:笑与泪经历与成长 教学设计-2024-2025学年统编版语文六年级上册
- 2025授权合同书范本
- 2025建筑工程公司借款合同
- 皮肤学知识考试题及答案
- 网络安全培训必火课件
- 单元考点必刷卷 (一)(含答案)我上学啦 2025-2026学年北师大版一年级数学上册
- 2025保安员考试基础知识应知应会试题+答案
- 农村厨师安全培训课件
- 2025-2026学年人教版(2024)小学体育与健康三年级(全一册)教学设计(附目录P114)
- 四川遂宁2021-2024年中考满分作文64篇
- 轧钢安全规程培训课件
- 2025年下半年上海市新航社区服务总站招聘5人备考练习题库及答案解析
- 2025版防洪堤坝加固工程施工合同
- 2025年消防经济学试题及答案
- 2025-2026学年人教版(2024)小学美术三年级上册教学计划及进度表
- 2025年秋期新教材人音版三年级上册小学音乐教学计划+进度表
评论
0/150
提交评论