递归算法设计思想与策略分析

递归算法设计思想与策略分析

ID:19892722

大小:61.50 KB

页数:9页

时间:2018-10-07

递归算法设计思想与策略分析_第1页
递归算法设计思想与策略分析_第2页
递归算法设计思想与策略分析_第3页
递归算法设计思想与策略分析_第4页
递归算法设计思想与策略分析_第5页
资源描述:

《递归算法设计思想与策略分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、递归算法设计思想与策略分析 :递归作为一种算法设计策略,是程序设计和描述算法的一种有力工具,在程序设计中被广泛应用。尤其在数值计算、数据结构、人工智能、算法设计与分析等领域应用广泛。分析递归算法设计的一般思想与方法、步骤及需要解决的关键问题。通過几个经典的可以采用递归实现的算法,详细阐述了如何通过分析问题,找到递归实现的两个基本核心问题,即递归表达式和递归终止条件,并据此编写递归调用函数。  关键词:递归算法;递归函数;算法设计;程序设计DOIDOI:10.11907/rjdk.171715:TP312:A:16727800(2017)0100035041递归

2、算法理论基础众所周知,通常把程序调用自身的编程技巧称为递归[1],递归作为一种算法设计策略,在程序设计中得到了广泛应用。递归按照调用的方式,可分为直接递归和间接递归两种类型[2]。直接递归是指函数在执行过程中直接调用自身;间接递归是指函数在执行过程中调用了其它函数,再经过这些函数调用自身。递归从字面上看,包含两部分内容,它由两个字组成,即递和归,递表示传送、传达的意思,归是返回的意思,从字面上讲递归就是周而复始的循环,但又不是简单的循环。从数学角度分析,递归的数学模型就是递推原理,在整个过程中,反复实现的都是同一个原理或操作,其本质和数学归纳法[3]相同。递归

3、适用于下述问题:解决一个问题可以转化为解决其子问题,而其子问题又变成子问题的子问题,而且这些问题的解决都是采用同一个模型,也即需要解决的问题和其子问题具有相同的逻辑归纳处理项。有一个子问题是例外的,也即递归结束的那一项,处理方法不适用于上述归纳处理项,当然也不能用这种方法去处理,否则就形成了无穷递归。这就引出了一个归纳终结点以及直接求解的表达式。根据上述分析,递推可表示如下:①步进表达式:问题转换为子问题求解的表达式;②结束条件:不再适用于步进表达式的情况,亦即何时不再使用步进表达式;③直接求解表达式:在结束条件下能够直接计算返回值的表达式;④逻辑归纳项:适用

4、于一切非结束条件下子问题的处理,包含上述步进表达式。由上述对递推原理的分析与描述,相应地可以得到递归求解必须满足的4个特征:①必须有可最终达到的终止条件,否则程序将陷入无穷循环;②子问题的规模要比原问题小,或更接近终止条件;③子问题可以通过再次递归求解或因满足终止条件而直接求解;④子问题的解应能组合为整个问题的解。2递归算法设计一般方法根据上述分析,递归的基本思想是将规模大的问题转化为规模较小的相似子问题加以解决,且这些规模较小子问题的求解过程相对容易,同时规模较小子问题的解足以构成原问题的解。在算法(函数)实现时,由于解决大问题的方法和解决小问题的方法往往是

5、同一个方法,因此产生了函数调用其自身的情况。解决问题的函数必须有明确的结束条件,也即递归函数必须是收敛的[5],这样才可以避免出现无穷递归的情况。综上,求解递归问题可转化为求解如下3方面问题:①如何将原问题划分为规模更小的子问题;②递归终止条件及最小子问题求解方法(递归函数的出口,允许递归函数有多个出口,至少要有1个);③找到保证递归规模向出口靠拢的表达式。将递归求解满足的4个特征归结为解决上述3个问题。实质上,上述3个问题还可作进一步简化,递归问题求解的两个关键点就是找到递归关系式和找出递归终止条件。3递归算法示例函数的递归调用是程序设计教学中的一个难点问题

6、,在此,本文通过由浅入深的实例,引导学生逐步掌握使用递归思想进行程序设计的技巧与能力。例1计算两个正整数m和n的最大公约数最大公约数,也称为最大公因数或最大公因子,指两个或多个正整数中约数最大的那一个。其主要求解方法有:质因数分解法、短除法、辗转相除法(欧几里得算法)[4]、更相减损法等。质因数分解法,就是对两个正整数分别分解质因数,再把两个数中所有公有的质因数提出来连乘,所得到的积就是这两个数的最大公约数。按照上述算法原理,正整数的质因数分解、求两个整数的公有质因数都很难分解为规模更小、求法类似的子问题,因此无法用递归解决。经过类似分析,短除法、更相减损法也

7、都不能递归地实现。Knuth在《计算机程序设计艺术》第一卷中给出了求两个正整数m和n最大公约数的欧几里德算法,其描述如下:Step1:求余数:用n除m,令r为余数(这里0≤r  }与辗转相除法类似,可以利用辗转相减法求两个正整数的最大公约数,仍然采用递归方法实现,本文给出具体递归函数。intgcd(intm,intn){//辗转相减法if(m==n)//递归终止的条件returnm;returngcd(m-n<0?n-m:m-n,m  该定理可以采用递归树法直观地加以证明,在此不再赘述。针对折半查找的递归式T(n)=T(n/2)+Θ(1

8、)和归并排序的递归式T(n)=2T(n

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。