《数据结构与算法》PPT课堂课件-第5章-递归.ppt
《《数据结构与算法》PPT课堂课件-第5章-递归.ppt》由会员分享,可在线阅读,更多相关《《数据结构与算法》PPT课堂课件-第5章-递归.ppt(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2存在算法调用自己的情况:存在算法调用自己的情况:若一个算法直接的或间接的若一个算法直接的或间接的调用自己本身调用自己本身,则称这,则称这个算法是递归算法。个算法是递归算法。(1 1)问题的定义是递推的)问题的定义是递推的阶乘阶乘函数的函数的常见定义常见定义是:是:5.1递归的概念3也可也可定义为:定义为:写成写成函数形式,则为:函数形式,则为:这种函数定义的方法是这种函数定义的方法是用阶乘函数用阶乘函数自己本身定义了阶乘函数自己本身定义了阶乘函数,称公式(,称公式(63)是阶乘函数的)是阶乘函数的递推定义式递推定义式。4(2)问题的解法存在自调用)问题的解法存在自调用 一一个个典典型型的的例
2、例子子是是在在有有序序数数组组中中查查找找一一个个数数据元素是否存在的据元素是否存在的折半查找算法折半查找算法。55.2递归算法的执行过程 例例6-1 6-1 给给出出按按照照公公式式6-36-3计计算算阶阶乘乘函函数数的的递递归归算算法法,并给出并给出n=3n=3时递归算法的执行过程。时递归算法的执行过程。设计:按照公式设计:按照公式6-36-3计算阶乘函数的递归算法如下:计算阶乘函数的递归算法如下:long long intint Fact(intFact(int n)n)intint x;x;long long intint y;y;if(n 0)if(n 0)/*(n 0/*(n hi
3、gh)return-1;if(low high)return-1;/*/*查找不成功查找不成功*/mid=(low+high)/2;mid=(low+high)/2;if(x=amid)if(x=amid)return mid;return mid;/*/*查找成功查找成功*/else if(x amid)else if(x amid)return return BSearch(aBSearch(a,x,low,mid-1);,x,low,mid-1);/*/*在下半区查找在下半区查找*/elseelsereturn return BSearch(aBSearch(a,x,mid+1,high
4、);,x,mid+1,high);/*/*在上半区查找在上半区查找*/9测试主函数设计如下:测试主函数设计如下:#include#include main(void)main(void)intint a=1,3,4,5,17,18,31,33;a=1,3,4,5,17,18,31,33;intint x=17;x=17;intint bnbn;bnbn=BSearch(aBSearch(a,x,0,7);,x,0,7);if(bnif(bn=-1)=-1)printf(xprintf(x不在数组不在数组a a中中););else else printf(xprintf(x在数组在数组a a的下
5、标的下标%d%d中中,bnbn););10BSearch(aBSearch(a,x,0,7),x,0,7)的递归调用过程如图的递归调用过程如图6-36-3所示,所示,其中,其中,实箭头实箭头表示函数表示函数调用调用,虚箭头虚箭头表示函数的表示函数的返回值返回值。115.3递归算法的设计方法 递递归归算算法法既既是是一一种种有有效效的的算算法法设设计计方方法法,也也是是一一种种有有效效的的分分析析问问题题的的方方法法。递递归归算算法法求求解解问问题题的的基基本本思思想想是是:对对于于一一个个较较为为复复杂杂的的问问题题,把把原原问问题题分分解解成成若若干干个个相相对对简简单单且且类类同同的的子子
6、问问题题,这这样样较较为为复复杂杂的的原原问问题题就就变变成成了了相相对对简简单单的的子子问问题题;而而简简单单到到一一定定程程度度的的子子问问题题可可以以直直接接求求解解;这这样样,原原问问题题就可递推得到解。就可递推得到解。并并不不是是每每个个问问题题都都适适宜宜于于用用递递归归算算法法求求解解。适适宜宜于于用用递递归归算算法法求求解解的的问问题的题的充分必要条件充分必要条件是:是:(1 1)问题具有某种可借用的类同自身的子问题描述的性质;)问题具有某种可借用的类同自身的子问题描述的性质;(2 2)某一有限步的子问题(也称作本原问题)有直接的解存在。)某一有限步的子问题(也称作本原问题)有
7、直接的解存在。当一个问题存在上述两个基本要素时,设计该问题的当一个问题存在上述两个基本要素时,设计该问题的递归算法的方法递归算法的方法是:是:(1 1)把对原问题的求解设计成包含有对子问题求解的形式。)把对原问题的求解设计成包含有对子问题求解的形式。(2 2)设计递归出口。)设计递归出口。12Hanoi塔问题问题描述:有A,B,C三个塔座,A上套有n个直径不同的圆盘,按直径从小到大叠放,形如宝塔,编号1,2,3n。要求将n个圆盘从A移到C,叠放顺序不变,移动过程中遵循下列原则:每次只能移一个圆盘圆盘可在三个塔座上任意移动任何时刻,每个塔座上不能将大盘压到小盘上解决方法:n=1时,直接把圆盘从A
8、移到Cn1时,先把上面n-1个圆盘从A移到B,然后将n号盘从A移到C,再将n-1个盘从B移到C。即把求解n个圆盘的Hanoi问题转化为求解n-1个圆盘的Hanoi问题,依次类推,直至转化成只有一个圆盘的Hanoi问题。执行情况:递归工作栈保存内容:形参n,x,y,z和返回地址返回地址用行编号表示n x y z 返回地址 13 main()int m;printf(Input number of disks”);scanf(%d,&m);printf(”Steps:%3d disks”,m);hanoi(m,A,B,C);(0)void hanoi(int n,char x,char y,cha
9、r z)(1)(2)if(n=1)(3)move(x,z);(4)else(5)hanoi(n-1,x,z,y);(6)move(x,z);(7)hanoi(n-1,y,x,z);(8)(9)ABC1233 A B C 03 A B C 02 A C B 63 A B C 02 A C B 61 A B C 6ABC3 A B C 02 A C B 614 main()int m;printf(Input the number of disks scanf(%d,&m);printf(The steps to moving%3d hanoi(m,A,B,C);(0)void hanoi(int
10、 n,char x,char y,char z)(1)(2)if(n=1)(3)move(x,z);(4)else(5)hanoi(n-1,x,z,y);(6)move(x,z);(7)hanoi(n-1,y,x,z);(8)(9)ABC3 A B C 02 A C B 61 C A B 8ABC3 A B C 02 A C B 63 A B C 03 A B C 02 A C B 615 main()int m;printf(Input the number of disks scanf(%d,&m);printf(The steps to moving%3d hanoi(m,A,B,C);
11、(0)void hanoi(int n,char x,char y,char z)(1)(2)if(n=1)(3)move(x,z);(4)else(5)hanoi(n-1,x,z,y);(6)move(x,z);(7)hanoi(n-1,y,x,z);(8)(9)ABC3 A B C 02 B A C 83 A B C 02 B A C 81 B C A 6ABC3 A B C 02 B A C 83 A B C 016 main()int m;printf(Input the number of disks scanf(%d,&m);printf(The steps to moving%3
12、d hanoi(m,A,B,C);(0)void hanoi(int n,char x,char y,char z)(1)(2)if(n=1)(3)move(x,z);(4)else(5)hanoi(n-1,x,z,y);(6)move(x,z);(7)hanoi(n-1,y,x,z);(8)(9)ABC3 A B C 02 B A C 81 A B C 8ABC3 A B C 02 B A C 83 A B C 0栈空3 A B C 02 B A C 8175.4递归过程和运行时栈对于非递归函数,调用函数在调用被调用函数前,系统要对于非递归函数,调用函数在调用被调用函数前,系统要保存保存以以
13、下两类下两类信息信息:(1 1)调用函数的返回地址;)调用函数的返回地址;(2 2)调用函数的局部变量值。)调用函数的局部变量值。当执行完被调用函数,返回调用函数前,系统首先要当执行完被调用函数,返回调用函数前,系统首先要恢复恢复调用函调用函数的数的局部变量值局部变量值,然后,然后返回返回调用函数的调用函数的返回地址返回地址。递归函数被调用时,系统要作的工作和非递归函数被调用时系递归函数被调用时,系统要作的工作和非递归函数被调用时系统要作的工作在统要作的工作在形式上类同形式上类同,但,但保存信息的方法不同保存信息的方法不同。递归函数被调用时,系统的运行时栈也要保存上述两类信息。递归函数被调用时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构与算法 数据结构 算法 PPT 课堂 课件 递归
限制150内