- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
探讨递归方法及其计算机实现
探讨递归方法及其计算机实现
摘要:随着计算机技术的快速发展,数学知识在计算机技术发展中,尤其是在计算机应用程序设计中处于极其重要的地位.同时,用数学的思维解决各种程序设计方面的难题也是十分重要的.从方法论意义上说,递归方法是一种从简单到复杂、从低级到高级的可连续操作的解决问题的方法。它的每一步骤都是能行可操作的,并且各步骤之间是连续转换的。本文就递归算法在程序学习中的作用及使用范围进行探讨,并对计算机的递归方法进行了阐述,通过实例说明数学递归问题的计算机实现。
关键词:递归方法;递归算法;程序设计;计算机实现
一、前言
众所周知,数学在计算机科学技术的发展中有不可替代的重要作用,如何将一个面临的实际问题转化为当前计算机系统能够处理的问题,数学理论知识在计算机上的实现是使计算机成为很好的新型数学工具的关键所在。而递归是程序设计中非常重要的内容,绝大部分程序设计语言都涉及到用递归解决问题。本文以递归算法为例,综述讲解了其在计算机基础学科中的知识要点,就递归算法在程序学习中的作用及使用范围进行探讨,以深化对该部分知识的掌握及运用。
二、递归方法
所谓递归是指借助于“回归”而把未知的归结为已知的。而递归函数是一种数论函数,就是说这种函数的定义域和值域都是自然数,并且对未知数值的计算往往是要回归到已知数值才能求出。递归是一种循环结构,它把“较复杂”情形的计算,递次地归结为“较简单”情形的计算,一直归结到“最简单”情形的计算,并得到计算结果为止。这就是递归的实质。对于定义是递归的,数据结构是递归的,问题的解法是递归的,都可以采用递归方法来处理。
递归论又称为“递归函数论”、“能行性理论”。各种递归函数本身的构造也是它研究的重要方面。递归论所研究的数论函数有精确的数学定义。为示例起见,用递归定义式定义“斐波那契函数”如下:
初始规定:
f(0)=0,
f(1)=l,
递归运算关系:
f(n)=f(n一1)+f(n一2)。
容易看到,任意给定一个自然数n,f(n)恒可使用上述递归定义式逐步地求得。
从一般意义上说,递归定义是用简单的、自明的要素描述、构造、说明复杂的整体。递归方法是通过解决简单的问题来解决复杂的问题。在人们的思维过程,存在着递归机制。对于某些问题必须用递归方法来定义或解决。
在各种科学领域中以至在社会结构中、人们的各种操作行为中,普遍存在一类具有递归结构的问题,我们把这类问题称为“递归问题”。递归方法就是解决这类“递归问题”的精确方法。
三、递归算法
1、递归算法的基本问题:斐波那契数列
假定一对刚出生的小兔一个月后就能长成大兔,再过一个月便能生下一对小兔,并且此后每个月都生一对小兔.一年内没有发生死亡.问一对刚出生的兔子,一年内能繁殖成多少对兔子?
逐月推算,我们可以得到数列:1,1,2,3,5,8,13,21,34,……数列中的每一项,则称为“斐波那契数”.第十三位的斐波那契数,即为一对刚出生的小兔,一年内所能繁殖成的兔子的对数.从斐波那契数的构造明显看出斐波那契数列从第三项起,每项都等于前面两项的和.假定第n项斐波那契数为Fn,于是我们有:F1=F2=1;Fn+1=Fn+Fn-1(n=2)
由以上的函数表达式我们可以看到该数列的求解就是一个递归的过程.其递归基础就是F1和F2的值,存在着不使用递归就可以解决问题的情况,即前文所说的归纳基础.该数列的向前进展情况便是其递归调用向归纳基础方向进展,即Fn+1=Fn+Fn-1(n ≥2).由此我们可以得到递归函数的两条基本的递归原则,即递归基础和向前进展.以上这种数学思想在计算机的程序设计方面有很重要
的作用,利用递归调用程序设计可以解决很复杂但规律性很强的问题,并且可以使程序变得简洁易懂。
2、递归算法的设计
在递归中,算法总是不断地调用自身,当满足最后终止条件时,递归又采取自下而上的方式返回,一直返回到问题求解的第一层,递归方调用完毕。递归执行过程中最先调用的函数,最后被返回。在整个过程中,必须借助栈来保护现场、返回现场。要注意递归的次数若过多,则栈的操作频繁,程序的运行效率会很低,因此,递归算法要慎用。
用递归来求解的问题必须具有两个基本特点:
(1)问题可被分解为和自身相同的子问题,且子问题更简单易处理。
(2)子问题经有限步后可得出直接的解。
一般只有满足这两个条件的问题才可用递归来处理。通过对递归求解问题的基本特点的分析来看,可设计递归算法的步骤如下:
(1)将问题化为子问题,即归纳、推导出递归公式。
(2)设计出递归的出口,即终止条件。
由递归算法的设计步骤, 我们可以进一步推导出递归算法的一般形式:
返回类型函数名(参数表) {
if (符合递归终止条件)直接求解; //终止条件
else 原函数名(参数); //递归公式}
我们由递归算法的一般形式可看到,这里
文档评论(0)