- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基本算法3-递归法
基本算法三递归 一、递归的概念 若在一个函数、过程或者数据结构定义的内部,直接(或间接)出现定义本身的应用,则称它们是递归的,或者是递归定义的。 递归是一种强有力的数学工具,它可使问题的描述和求解变得简洁和清晰。 n!=n*(n-1)! F(n)=F(n-1)+F(n-2) 一、递归的概念 对于一个递归定义而已,除了要定义递归的方式(即如何递归)外,还必须定义递归的终止条件(即如何停止递归),否则递归将永无止境的进行下去。 二、递归算法用于解决的问题 一般来说,能够用递归解决的问题应该满足以下三个条件: 需要解决的问题可以化为一个或多个子问题来求解,而这些子问题的求解方法与原来的问题完全相同,只是在数量规模上不同; 递归调用的次数必须是有限的; 必须有结束递归的条件(边界条件)来终止递归。 二、递归算法用于解决的问题 可用递归解决的具体问题: 数据的定义形式是按递归定义的。如阶乘。 问题的解法按递归算法实现。如回溯算法。 数据结构的形式是按递归定义的。如树的遍历。 递归函数 三、递归算法的执行过程 求m与n的最大公约数。 (用辗转相除法数学知识已知:m,n的最大公约数等价于求n与(m mod n)的最大公约数。) 汉诺塔问题 如图所示,我们有三根柱子(A、B、C)和若干大小各异的圆盘,一开始的时候,所有圆盘都在A柱上,且按照从小到大的顺序排列整齐(小的在上,大的在下),现在请你把所有的圆盘从A柱搬到C柱上去。在搬动的时候,一次只能将某柱最顶端的一个圆盘移动到另一柱的最顶端,且在移动的过程中,永远不允许出现大圆盘在小圆盘之上的情况。 汉诺塔问题 输入:3 输出:A-CA-BC-BA-CB-AB-CA-C 汉诺塔问题 只有一个盘子的移动:A?C 两个盘子的移动:A?B,A?C,B?C n个盘子的移动(n2): 将上面的n-1个盘子看成一个整体,则此问题被转换为两个盘子的移动 而n-1个盘子的移动规则与此相同 汉诺塔问题的递归描述 当只移动一个盘子的时候,直接从起始柱移动到目标柱,否则,执行如下操作: 将前n-1盘子以相同的方法从起始柱移动到临时柱; 将第n个盘子直接移动到目标柱; 将前n-1个盘子以相同的方法从临时柱移动到目标柱; 汉诺塔问题递归代码 四、应用举例—斐波那契数列 有一种兔子,出生后一个月就可以长大,然后再过一个月一对长大的兔子就可以生育一对小兔子且以后每个月都能生育一对。现在,我们有一对刚出生的这种兔子,那么,n个月过后,我们会有多少对兔子呢?假设所有的兔子都不会死亡。 输入:5 输出:5 兔子出生演示 斐波那契数列 从上面的分析可以看到,第n个月后兔子的数目有两部分构成:1、上月的所有兔子;2、上月的所有老兔子所生的小兔子。 因此,若我们记第n个月的兔子总数为F(n)、老兔子数为G(n)的话,那么F(n)=F(n-1)+G(n-1)。 那么G(n)怎么得到呢?通过分析上图,我们可以发现,第n个月的老兔子数等于第n-1个月的兔子总数,因此上式中的G(n-1)=F(n-2)。 斐波那契数列 因此,我们可以得到递归公式:F(n)=F(n-1)+F(n-2) 而递归的终止条件则是:n=1或n=2时,F(n)=1 斐波那契数列 递归过程 例:把一个十进制整数转换成K进制数(k10)。 分析 根据数制转换规则,把一个十进制整数转换成K进制数,要用“除K取余”法。也就是用K依次去除这个数及其商,所得余数依次作为K进制数相继的低位数字,一直到商为0即可。 如果我们不用数组存储每次求得的低位数字,怎么让程序按顺序输出K进制的各位数字? 分析 可以用递归的方法实现这一过程。算法过程tentok(number,k)如下: 步一 digit?number mod k; 步二 number?number div k 步三 如果number不为0则调用 tentok(number,k) 步四 输出digit 执行过程分析 四、应用举例—n皇后问题 在一个n×n的棋盘上放置n个国际象棋中的皇后,要求所有的皇后之间都不形成攻击。请你给出所有可能的排布方案数。 输入:4 输出:2 n皇后问题 对于n皇后问题而言,我们很难找出很合适的方法来快速的得到解,因此,我们只能采取最基本的枚举法来求解。 但我们知道,在n×n的棋盘上放置n个棋子的所有放置方案有 种,而这个数字十分庞大,直接枚举肯定会超时。 n皇后问题 但是考虑到皇后攻击的特性,所有的皇后不能同行、同列,因此,我们可以人为的限定所有的皇后不同行、同列,这样的话,所有的可能性就只有n!种了。 我们只要枚举出所有这n!种排布,找出其中满足任意两皇后都不共对角线的所有情况即可。 n皇后问题 那么如何来枚举这n!种排布呢? 既然所有的皇后都不
您可能关注的文档
最近下载
- (正版) GB 50367-2013 混凝土结构加固设计规范.docx VIP
- (2025春)人教版二年级数学上册全册教案.doc
- 小学课程表word模板可编辑a4纸打印.docx VIP
- 栽培小能手.ppt VIP
- 2025年CCAA国家注册审核员考试(认证通用基础)历年参考题库含答案详解(5卷).docx VIP
- 14.2+血管与心脏+第2课时(教学课件)生物苏科版2024八年级上册.pptx VIP
- MSDSFORsilicondioxide白碳黑英文安全技术说明书.pdf VIP
- 15J401 钢梯-标准图集.docx VIP
- 药剂学(第9版)ER 9-1 第九章液体制剂的单元操作(课件).pptx VIP
- 土地复垦方案编制规程通则.doc VIP
文档评论(0)