- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
递归算法设计思想和策略分析
递归算法设计思想和策略分析
摘要:递归作为一种算法设计策略,是程序设计和描述算法的一种有力工具,在程序设计中被广泛应用。尤其在数值计算、数据结构、人工智能、算法设计与分析等领域应用广泛。分析递归算法设计的一般思想与方法、步骤及需要解决的关键问题。通?^几个经典的可以采用递归实现的算法,详细阐述了如何通过分析问题,找到递归实现的两个基本核心问题,即递归表达式和递归终止条件,并据此编写递归调用函数。
关键词:递归算法;递归函数;算法设计;程序设计
DOIDOI:10.11907/rjdk.171715
中图分类号:TP312文献标识码:A文章编号2017)010003504
1递归算法理论基础
众所周知,通常把程序调用自身的编程技巧称为递归[1],递归作为一种算法设计策略,在程序设计中得到了广泛应用。递归按照调用的方式,可分为直接递归和间接递归两种类型[2]。
直接递归是指函数在执行过程中直接调用自身;间接递归是指函数在执行过程中调用了其它函数,再经过这些函数调用自身。
递归从字面上看,包含两部分内容,它由两个字组成,即“递”和“归”,“递”表示传送、传达的意思,“归”是返回的意思,从字面上讲递归就是周而复始的循环,但又不是简单的循环。
从数学角度分析,递归的数学模型就是递推原理,在整个过程中,反复实现的都是同一个原理或操作,其本质和数学归纳法[3]相同。
递归适用于下述问题:解决一个问题可以转化为解决其子问题,而其子问题又变成子问题的子问题,而且这些问题的解决都是采用同一个模型,也即需要解决的问题和其子问题具有相同的逻辑归纳处理项。有一个子问题是例外的,也即递归结束的那一项,处理方法不适用于上述归纳处理项,当然也不能用这种方法去处理,否则就形成了无穷递归。这就引出了一个归纳终结点以及直接求解的表达式。
根据上述分析,递推可表示如下:①步进表达式:问题转换为子问题求解的表达式;②结束条件:不再适用于步进表达式的情况,亦即何时不再使用步进表达式;③直接求解表达式:在结束条件下能够直接计算返回值的表达式;④逻辑归纳项:适用于一切非结束条件下子问题的处理,包含上述步进表达式。
由上述对递推原理的分析与描述,相应地可以得到递归求解必须满足的4个特征:①必须有可最终达到的终止条件,否则程序将陷入无穷循环;②子问题的规模要比原问题小,或更接近终止条件;③子问题可以通过再次递归求解或因满足终止条件而直接求解;④子问题的解应能组合为整个问题的解。
2递归算法设计一般方法
根据上述分析,递归的基本思想是将规模大的问题转化为规模较小的相似子问题加以解决,且这些规模较小子问题的求解过程相对容易,同时规模较小子问题的解足以构成原问题的解。
在算法(函数)实现时,由于解决大问题的方法和解决小问题的方法往往是同一个方法,因此产生了函数调用其自身的情况。解决问题的函数必须有明确的结束条件,也即递归函数必须是收敛的[5],这样才可以避免出现无穷递归的情况。
综上,求解递归问题可转化为求解如下3方面问题:①如何将原问题划分为规模更小的子问题;②递归终止条件及最小子问题求解方法(递归函数的出口,允许递归函数有多个出口,至少要有1个);③找到保证递归规模向出口靠拢的表达式。
将递归求解满足的4个特征归结为解决上述3个问题。实质上,上述3个问题还可作进一步简化,递归问题求解的两个关键点就是找到递归关系式和找出递归终止条件。
3递归算法示例
函数的递归调用是程序设计教学中的一个难点问题,在此,本文通过由浅入深的实例,引导学生逐步掌握使用递归思想进行程序设计的技巧与能力。
例1计算两个正整数m和n的最大公约数
最大公约数,也称为最大公因数或最大公因子,指两个或多个正整数中约数最大的那一个。其主要求解方法有:质因数分解法、短除法、辗转相除法(欧几里得算法)[4]、更相减损法等。
质因数分解法,就是对两个正整数分别分解质因数,再把两个数中所有公有的质因数提出来连乘,所得到的积就是这两个数的最大公约数。按照上述算法原理,正整数的质因数分解、求两个整数的公有质因数都很难分解为规模更小、求法类似的子问题,因此无法用递归解决。经过类似分析,短除法、更相减损法也都不能递归地实现。
Knuth在《计算机程序设计艺术》第一卷中给出了求两个正整数m和n最大公约数的欧几里德算法,其描述如下:
Step1:求余数:用n除m,令r为余数(这里0≤rn);
Step2:如果r=0,算法终止,n就是答案;
Step3:置m←n,n←r,然后返回Step1。
欧几里得算法计算原理依据如下结论:两个正整数的最大公约数(Grea
您可能关注的文档
最近下载
- 一种基于压力监测的输液港自动封堵装置.pdf VIP
- 菠菜种植课件PPT.pptx VIP
- 紫色复古风《莴苣姑娘》童话故事PPT模板.pptx VIP
- 盐雾试验报告-.docx VIP
- [青海]水电站厂房机电设备安装工程量清单及招标文件.doc VIP
- 拓展低空经济应用场景实施方案.pptx VIP
- 第5课 中国古代官员的选拔与管理 课件(共45张PPT) 统编版高中历史选择性必修1(内嵌视频+音频).pptx VIP
- 时间序列分析—基于Python王燕习题答案.pdf VIP
- 百度AI营销认证初级考试理论知识题库(628题).docx
- 2025年电力安全工作规程(发电厂和变电站电气部分)题库(294道) .pdf VIP
文档评论(0)