ACM培训第四讲递归ppt课件

上传人:s9****2 文档编号:568829746 上传时间:2024-07-27 格式:PPT 页数:23 大小:200.50KB
返回 下载 相关 举报
ACM培训第四讲递归ppt课件_第1页
第1页 / 共23页
ACM培训第四讲递归ppt课件_第2页
第2页 / 共23页
ACM培训第四讲递归ppt课件_第3页
第3页 / 共23页
ACM培训第四讲递归ppt课件_第4页
第4页 / 共23页
ACM培训第四讲递归ppt课件_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《ACM培训第四讲递归ppt课件》由会员分享,可在线阅读,更多相关《ACM培训第四讲递归ppt课件(23页珍藏版)》请在金锄头文库上搜索。

1、ACM第四讲第四讲-递归递归1算法总体思想算法总体思想算法总体思想算法总体思想将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。nT(n)=n/2T(n/4) T(n/4) T(n/4) T(n/4)n/2T(n/4) T(n/4) T(n/4) T(n/4)n/2T(n/4) T(n/4) T(n/4) T(n/4)n/2T(n/4) T(n/4) T(n/4) T(n/4) 分治法的设计思想是,将一个难以直接解决的大问题,分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分割成一些规模较小的相同问题,以便各个击破,

2、分而治之。分而治之。凡治众如治寡,分数是也。凡治众如治寡,分数是也。-孙子兵法孙子兵法2递归的概念递归的概念递归的概念递归的概念直接或间接地调用自身的算法称为递归算法递归算法。用函数自身给出定义的函数称为递递归函数归函数。由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。下面来看几个实例。3递归递归递归递归例例1 1 阶乘函数阶乘函数阶乘函数可递归地定

3、义为:边界条件边界条件递归方程递归方程边界条件与递归方程是递归函数的二个要素,递归函数只有具备了这两个要素,才能在有限次计算后得出结果。4递归递归递归递归例例2 Fibonacci2 Fibonacci数列数列无穷数列1,1,2,3,5,8,13,21,34,55,被称为Fibonacci数列。它可以递归地定义为:边界条件边界条件递归方程递归方程第n个Fibonacci数可递归地计算如下:public static int fibonacci(int n) if (n 1时,perm(R)由(r1)perm(R1),(r2)perm(R2),(rn)perm(Rn)构成。 11递归递归递归递归

4、例例5 5 整数划分问题整数划分问题将正整数n表示成一系列正整数之和:n=n1+n2+nk,其中n1n2nk1,k1。正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数。 例如正整数6有如下11种不同的划分: 6; 5+1; 4+2,4+1+1; 3+3,3+2+1,3+1+1+1; 2+2+2,2+2+1+1,2+1+1+1+1; 1+1+1+1+1+1。12(2) q(n,m)=q(n,n),mn;最大加数n1实际上不能大于n。因此,q(1,m)=1。(1) q(n,1)=1,n1;当最大加数n1不大于1时,任何正整数n只有一种划分形式,即 (4) q(n,m)=q(n,m-1

5、)+q(n-m,m),nm1;正整数n的最大加数n1不大于m的划分由n1=m的划分和n1n-1 的划分组成。(3) q(n,n)=1+q(n,n-1);正整数n的划分由n1=n的划分和n1n-1的划分组成。递归递归递归递归例例5 5 整数划分问题整数划分问题前面的几个例子中,问题本身都具有比较明显的递归关系,因而容易用递归函数直接求解。在本例中,如果设p(n)为正整数n的划分数,则难以找到递归关系,因此考虑增加一个自变量:将最大加数n1不大于m的划分个数记作q(n,m)。可以建立q(n,m)的如下递归关系。13递归递归递归递归例例5 5 整数划分问题整数划分问题前面的几个例子中,问题本身都具有

6、比较明显的递归关系,因而容易用递归函数直接求解。在本例中,如果设p(n)为正整数n的划分数,则难以找到递归关系,因此考虑增加一个自变量:将最大加数n1不大于m的划分个数记作q(n,m)。可以建立q(n,m)的如下递归关系。正整数n的划分数p(n)=q(n,n)。 14递归递归递归递归例例6 Hanoi6 Hanoi塔问题塔问题设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则:规则1:每次只能移动1个圆盘;规则2:任何时刻都

7、不允许将较大的圆盘压在较小的圆盘之上;规则3:在满足移动规则1和2的前提下,可将圆盘移至a,b,c中任一塔座上。15在问题规模较大时,较难找到一般的方法,因此我们尝试用递归技术来解决这个问题。当n=1时,问题比较简单。此时,只要将编号为1的圆盘从塔座a直接移至塔座b上即可。当n1时,需要利用塔座c作为辅助塔座。此时若能设法将n-1个较小的圆盘依照移动规则从塔座a移至塔座c,然后,将剩下的最大圆盘从塔座a移至塔座b,最后,再设法将n-1个较小的圆盘依照移动规则从塔座c移至塔座b。由此可见,n个圆盘的移动问题可分为2次n-1个圆盘的移动问题,这又可以递归地用上述方法来做。由此可以设计出解Hanoi

8、塔问题的递归算法如下。递归递归递归递归例例6 Hanoi6 Hanoi塔问题塔问题 public static void hanoi(int n, int a, int b, int c) if (n 0) hanoi(n-1, a, c, b); move(a,b); hanoi(n-1, c, b, a); 16课堂练习课堂练习-基础基础:转转相除法求最大公约数1718课堂练习课堂练习-题目题目1:问题描述:大于1的正整数n可以分解成为n=x1*x2*x3*xn例如,当n=12时,共有8种不同的分解式12=12*112=6*212=4*312=3*412=3*2*212=2*612=2*3

9、*212=2*2*3输入n,求n的整数因子分解7/27/202419甲、乙两人同时从A地出发要尽快同时赶到B地。出发时A地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲、乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达【输入】仅一行,三个数据分别表示AB两地的距离s,人的步行速度a,车的速度b。【输出】两人同时到达B地需要的最短时间。【样例】输入:120525输出9.6000000000E+00课堂练习课堂练习-题目题目2:20今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。我们约定:每个人从盒子中取出的球的数目必须是:1,3,7或者8个。轮到某一方取球时不能弃权!A先取球,然后双方交替取球,直到取完。被迫拿到最后一个球的一方为负方(输方)请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A是否能赢?课堂练习课堂练习-题目题目3:21输入:1018输出:0110课堂练习课堂练习-题目题目3:22课后作业课后作业1.完成课上的例题和练习题2.HDU:1028,1650,2018,2042,20442045,2047,2049,2585,44727/27/202423

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号