- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[例1]用递归函数求n! 分析: n!可以由下列公式表示: 1 n=0 n!= n*(n-1)! n 0 根据数学中的定义把求n! 定义为求n*(n-1)! ,其中求(n-1)! 仍采用求n! 的方法,需要定义一个求a!的过程或函数,逐级调用此过程或函数,即: (n-1)!= (n-1)*(n-2)! ; (n-2)!= (n-2)*(n-3)! ; …… 直到n=0时给出0!=1,才开始逐级返回并计算各值。 ①定义递归函数:fac(a: integer): integer; 如果a=0,则fac:=1; 如果a 0,则调用函数fac:=fac(a-1)*a; ②返回主程序,打印fac(n)的结果。 Pascal程序: ====================================================================== Program Exam1; Var n,s: integer; function fac(a: integer): integer; {函数fac(a) 求a !} begin if a=0 then fac:=1 else fac:=a*fac(a-1) {函数fac(a-1)递归求(a-1) !} end; begin readln(n); s:=fac(n) writeln(n, ’!=’, s); {主程序调用fac(n) 求n !} readln end. 递归过程分析(如下图): 3层 a=0 fac(0) 2层 a=1 fac(1) 1层 a=2 fac(2) 0层 a=3 fac(3) 递归算法表现在处理问题的强大能力。然而,如同循环一样,递归也会带来无终止调用的可能性,因此,在设计递归过程(函数)时,必须考虑递归调用的终止问题,就是递归调用要受限于某一条件,而且要保证这个条件在一定情况下肯定能得到满足。 [例2]用递归算求自然数m,n的最大公约数。 分析: (一)求最大公约数的方法有许多种,若用欧几里德发明的辗转相除方法如下: ① 求出m除以n的余数r,即r:=m mod n; ② 判断r,若r=0,则最大公约数就是n,程序结束; 若r 0,则m:=n,n:=r,重复①②。 (二)该算法符合递归条件 ① 求m与n的最大公约数等价于求n与余数r的最大公约数,即将原问题的求解转化为子问题的求解,其求解方法与原问题相同; ② m与n的值不断更新,使得问题求解的规模越来越小; ③ 在求解的过程中,范围越小,肯定能达到结束条件m mod n=0,即余数为零,从而求得最大公约数,也就是最终存放在n中的数据。 显然这个问题可以用递归来实现。 递归公式: n m mod n=0 gcd(m,n) gcd(n,m mod n) m mod n 0 Pascal程序: ======================================================================== Program Exam4; Var a,b,d: integer; Procedure Gdd(x, y: nteger);{过程} begin if x mod y =0 then d :=y else Gdd(y, x mod y) {递归调用过程} end; begin write(’input a, b=’); readln(a, b); Gdd(a, b); writeln(’(’, a, ’,’, b, ’)=’, d ); readln end. ======================================================================== 简单地说,递归算法的本质就是自己调用自己,用调用自己的方法去处理问题,可使解决问题变得简洁明了。按正常情况有几次调用,就有几次返回。但有些程序可以只进行递归处理,不一定要返回时才进行所需要的处理。 [例3] 移梵塔。有三根柱A,B,C在柱A上有N块盘片,所有盘片都是大的在下面,小片能放在大片上面。现要将A上的N块片移到C柱上,每次只能移动一片,而且在同一根柱子上必须保持上面的盘片比下面的盘片小,请输出移动方法。 解:先考虑简单情形。 如果N=3,则具体移动步
您可能关注的文档
最近下载
- photoshop实验指导书..doc VIP
- 文献阅读与数学写作:微积分的创立与发展++课件-2024-2025学年高二下学期数学人教A版(2019)选择性必修第二册.pptx VIP
- TPM全员生产维护培训课件(课件-36张).ppt VIP
- 《全国食品安全监督抽检实施细则》复习测试卷附答案.doc
- 一种铁电负电容晶体管的电路仿真模型及建模方法.pdf VIP
- 《智慧化税费申报与管理》教案 项目八 资源税和环境保护税智慧化申报与管理.docx VIP
- 建筑法培训课件.ppt VIP
- 铜陵铜化集团招聘考试试题.pdf
- 食品抽检复习试题有答案.doc
- 2025年秋季《南京照相馆》开学第一课主题班会课件.pptx VIP
文档评论(0)