版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.,第四章 递归算法,.,前面已经介绍了关于递归调用这样一种操作,而递归程序设计是C+语言程序设计中的一种重要的方法,它使许多复杂的问题变得简单,容易解决了。递归特点是:函数或过程调用它自己本身。其中直接调用自己称为直接递归,而将A调用B,B以调用A的递归叫做间接递归。,.,【例1】 给定n(n=1),用递归的方法计算1+2+3+4+.+(n-1)+n。 【算法分析】 本题可以用递归方法求解,其原因在于它符合递归的三个条件: (1)本题是累加问题:当前和=前一次和+当前项,而前一次和的计算方法与其相同,只是数据不同s(n)=s(n-1)+n; (2)给定n,所以是有限次的递归调用; (3)结束
2、条件是当n=1,则s=1。 【参考程序】 #include using namespace std; int fac(int); /递归函数 int main() int t; cint; /输入t的值 couts=fac(t)ak; cinx; search(x,L,R); system(pause); void search(int x,int top,int bot) /二分查找递归过程 int mid; if (top=bot) mid=(top+bot)/2; /求中间数的位置,.,if (x=amid) coutYESendl; /找到就输出 else if (xamid) sea
3、rch(x,mid+1,bot); /判断在前半段还是后半段查找 else search(x,top,mid-1); else coutNO B, A - 2 - C, B - 1- C. (3)如果N=3,则具体移动步骤为:,.,.,假设把第3步,第4步,第7步抽出来就相当于N=2的情况(把上面2片捆在一起,视为一片):,.,所以可按“N=2”的移动步骤设计: 如果N=0,则退出,即结束程序;否则继续往下执行; 用C柱作为协助过渡,将A柱上的(N-1)片移到B柱上,调用过程mov(n-1, a,b,c); 将A柱上剩下的一片直接移到C柱上; 用A柱作为协助过渡,将B柱上的(N-1)移到C柱上
4、,调用过程mov (n-1,b,c,a)。 【参考程序】 #include using namespace std; int k=0,n; void mov(int n,char a,char c,char b) /用b柱作为协助过渡,将a柱上的(n)移到c柱上 if (n=0) return; /如果n=0,则退出,即结束程序 mov(n-1,a,b,c ); /用c柱作为协助过渡,将a柱上的(n-1)片移到b柱上 k+; cout cm; coutfib(m)=0)。 下面,我们来确定S(n,k)的边界条件,首先不能把n个元素不放进任何一个集合中去,即k=0时,S(n,k)0;也不可能在不
5、允许空盒的情况下把n个元素放进多于n的k个集合中去,即kn时,S(n,k)0;再者,把n个元素放进一个集合或把n个元素放进n个集合,方案数显然都是1,即k=1或k=n时,S(n,k)=1。 因此,我们可以得出划分数S(n,k)的递归关系式为: S(n,k)S(n1,k1) + k * S(n1,k) (nk,k0) S(n,k)0 (n n k; cout n; dfs(n); cout n; for (int i = 1; i = n; i+) hi = -1; /h数组初始化为-1 dfs(n); /由顶到下记忆化递归求解 cout n; for (int i = 1; i = n; i+
6、) /按照递增顺序计算扩展出的自然数的个数 hi = 1; /扩展出的自然数包括i本身 for (int j = 1; j = i/2; j+) /i左边分别加上1自然数 按规则扩展出的自然数 hi += hj; cout n; for (int i = 1; i = n; i+) hi = 1 + si/2; si = si-1 + hi; /s是h的前缀累加和 cout n; h1 = 1; for (int i = 2; i = n; i+) hi = hi-1; if (i % 2 = 0) hi = hi-1 + hi/2; cout 0) 【输入格式】 输入二个数,即m和n的值。
7、【输出格式】 输出最大公约数。 【输入样例】 8 6 【输出样例】 gcd=2,.,6、双色Hanoi塔问题 【问题描述】 设A、B、C是3 个塔座。开始时,在塔座A 上有一叠共n 个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,n,奇数号圆盘着蓝色,偶数号圆盘着红色,如图所示。现要求将塔座A 上的这一叠圆盘移到塔座B 上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则: 规则(1):每次只能移动1 个圆盘; 规则(2):任何时刻都不允许将较大的圆盘压在较小的圆盘之上; 规则(3):任何时刻都不允许将同色圆盘叠在一起; 规则(4):在满足移动规则(1)-(3)的前
8、提下,可将圆盘移至A,B,C 中任一塔座上。,试设计一个算法,用最少的移动次数将塔座A 上的n个圆盘移到塔座B 上,并仍按同样顺序叠置。,.,【编程任务】 对于给定的正整数n,编程计算最优移动方案。 【输入格式】 由文件hanoi.in给出输入数据。第1 行是给定的正整数n。 【输出格式】 将计算出的最优移动方案输出到文件hanoi.out。文件的每一行由一个正整数k和2个字符c1和c2组成,表示将第k个圆盘从塔座c1移到塔座c2上。 【输入样例】 3 【输出样例】 1 A B 2 A C 1 B C 3 A B 1 C A 2 C B 1 A B,.,7、背包问题 【问题描述】 简单的背包问
9、题。设有一个背包,可以放入的重量为s。现有n件物品,重量分别为w1,w2,wn,(1in)均为正整数,从n件物品中挑选若干件,使得放入背包的重量之和正好为s。找到一组解即可。 【输入格式】 第一行是物品总件数和背包的载重量,第二行为各物品的重量。 【输出格式】 各所选物品重量。 【输入样例】 5 10 1 2 3 4 5 【输出样例】 number:1 weight:1 number:4 weight:4 number:5 weight:5,.,8、2的幂次方(Noip1998) 【问题描述】 任何一个正整数都可以用2的幂次方表示。例如: 137=27+23+20 同时约定方次用括号来表示,即
10、ab 可表示为a(b)。 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7= 22+2+20 (21用2表示) 3=2+20 所以最后137可表示为: 2(2(2)+2+2(0)+2(2+2(0)+2(0) 又如: 1315=210 +28 +25 +2+1 所以1315最后可表示为: 2(2(2+2(0)+2)+2(2(2+2(0)+2(2(2)+2(0)+2+2(0) 【输入格式】 正整数(n20000) 【输出格式】 符合约定的n的0,2表示(在表示中不能有空格) 【输入样例】 137,【输出样例】 2(2(2)+2+2(0)+2(2+2(0)+2(0),.,9、数的
11、计数(Noip2001) 【问题描述】 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n1000), 然后对此自然数按照如下方法进行处理: 1不作任何处理; 2在它的左边加上一个自然数,但该自然数不能超过原数(输入的n)的一半; 3加上数后,继续按此规则进行处理,直到不能再加自然数为止。 【输入样例】 6 满足条件的数为 6 (此部分不必输出) 16 26 126 36 136 【输出样例】 6,.,【编程任务】 给定正整数n 和m,计算出n 个元素的集合1,2, n 可以划分为多少个不同的由m 个非空子集组成的集合。 【输入格式】 由文件stir.in提供输入
12、数据。文件的第1 行是元素个数n和非空子集数m。 【输出格式】 程序运行结束时,将计算出的不同的由m个非空子集组成的集合数输出到文件stir.out中。 【输入样例】 4 3 【输出样例】 6 【算法分析】 所求的是第2类Stirling数,通过可递推出如下递归式: S(n,m)=mS(n-1,m)+S(n-1,m-1); S(n,n+1)=0,S(n,0)=0,S(0,0)=1,.,10、集合划分问题 【问题描述】 n个元素的集合1,2, n 可以划分为若干个非空子集。例如,当n=4 时,集合1,2,3,4可以划分为15 个不同的非空子集如下: 1,2,3,4, 1,2,3,4, 1,3,2,4, 1,4,2,3, 2,3,1,4, 2,4,1,3, 3,4,1,2, 1,2,3,4, 1,3,2,4, 1,4,2,3, 1,2,3,4, 1,2,4,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沪教版语文一下《小蝌蚪找妈妈》课件3
- 人教新课标六上《索溪峪的“野”》课件之二
- 危大工程专项安全管理制度及台账模板
- 年产xx吨茶饮料生产项目可行性研究报告
- 中小学网络工程施工方案
- 实验室特殊时段安全培训课件
- 建筑给排水管道维护与保养方案
- 阳台防水方案
- 实验室合规管理专项培训课件
- 酿造酱油扩产项目可行性研究报告
- GB/T 12729.1-2026香辛料和调味品名称
- 2026广东深圳市交易集团限公司选聘28人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年焊工技术比赛模拟试题(含答案)
- 第5课 生命最宝贵 课件(内嵌视频)2026-2027学年道德与法治四年级上册统编版
- 铁矿选矿技术概述培训课件
- 2026中国医生AI行为与态度调研报告抢先版
- 2026报关员面试题目及答案
- 小学一年级同音字大全(带拼音+组词+字义区分课本高频)
- 2026中国人工智能辅助心电图诊断准确率验证研究
- 重庆航天科工集团笔试题
- 中国慢性肾脏病诊疗指南2025版
评论
0/150
提交评论