递归算法详解.docx

  1. 1、本文档共68页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
冯文科 ―、递归的基本概念。 一个函数、概念或数学结构,如果在其定义或说明内部直接或间接地出现对其本身的引 用,或者是为了描述问题的某一状态,必须要用至它的上一状态, 而描述上一状态,又必须 用到它的上一状态……这种用自己来定义自己的方法, 称之为递归或递归定义。 在程序设计 中,函数直接或间接调用自己,就被称为递归调用。 二、递归的最简单应用:通过各项关系及初值求数列的某一项。 在数学中,有这样一种数列,很难求出它的通项公式,但数列中各项间关系却很简单, 于是人们想出另一种办法来描述这种数列:通过初值及 an与前面临近几项之间的关系。 要使用这样的描述方式,至少要提供两个信息:一是最前面几项的数值,一是数列间各 项的关系。 比如阶乘数列 1、2、6、24、120、720??… 如果用上面的方式来描述它,应该是: 二l 如果需要写一个函数来求 an的值,那么可以很容易地写成这样: int f(int n) if(n==1) return 1; return n*f(n-1); 这就是递归函数的最简单形式, 从中可以明显看出递归函数都有的一个特点: 先处理一 些特殊情况一一这也是递归函数的第一个出口, 再处理递归关系一一这形成递归函数的第二 个出口。 递归函数的执行过程总是先通过递归关系不断地缩小问题的规模, 直到简单到可以作为 特殊情况处理而得出直接的结果, 再通过递归关系逐层返回到原来的数据规模, 最终得出问 题的解。 以上面求阶乘数列的函数 f (n)为例。如在求f (3)时,由于3不是特殊值,因此需要计 算3* f(2),但f(2)是对它自己的调用,于是再计算 f(2) , 2也不是特殊值,需要计算 2*f(1),需要知道f(1)的值,再计算f (1) , 1是特殊值,于是直接得出 f(1)=1,返回上 步,得 f (2) =2* f (1) = 2 ,再返回上一步,得 f(3)=3* f(2) = 3*2 = 6,从而得最 步,得 f (2) =2* f (1) = 2 , 终解。 用图解来说明,就是 f(3)的执行过程(特殊值判断:)3 # f(3)的执行过程 (特殊值判断:) 3 # 1 ,继续向下。 (递归关系处理:) f(2)的执行过程 f (1)的执行过程 (特殊值判断:) 1 = 1,由特殊情 况出口直接返回1。. 求3* f 求3* f (2),需要先 求2* f(1),需要先 计算f(2),调用二)//且本身挂起 计算f(2),调用二)// 且本身挂起 得到f (2) =2 ,由正 得到f(1)=1 ,由正 卜面再看一个稍复杂点的例子。 【例1】数列{an}的前几项为 1、 编程求a 编程求 an的精确分数解。 分析: 1 这个题目较易,发现 a1 =1,其它情况下有an = 。如要求实数解的话,这基本 1 an】 已经可以写出递归函数了。但由于题目要求精确的分数解,还需做一些调整。设 ana=-, p 1 1 D 则由递归关系, 有an = = = ,再约分化间,即碍 an。但发现一个问题: 1 an4 1 . q p q P 求出an」时,需要返回两个整数:分子 q与分母p,而通常的函数只能返回一个整数。 这个问题一般有两类解决办法, 一种是让求值函数返回一个结构体变量, 这样就可以返 回两个变量了(其实还可以不只两个呢) ;另一种是在求值函数的参数表中加入两个指针变 量或引用变量,通过参数给带回数值。 但由于后一种做法会使程序结构不清晰一一返回值是 由参数表得到的,因此我们使用前一种方法。 另外,在通过anA=-得出为=—^ 后,an就已经是最简分数了,无须化简。证明 p p q 如下: 若-是最简分数,即说明p, q的最大公约数为1,即对任何1 < r壬q ,都有q mod r与 P pmod r不全为 0,不防记 q mod r = a、p mod r = b ,则有 (p q) mod r = (a b) mod r 只要a与b不全为0,且a <r,b<r ,就有a与(a + b)mod r不全为0。因此对任何的 1 < r 壬 q ,有 p mod r 与(p + q)mod r 不全为 0。 而对于q < r < p的情况而言,记 p mod r = a ,则有 (p q) mod r = (a q) mod r 由于0三a ::: r,0 ::: q ::: r ,因此同样有 p mod r与(p ? q) mod r不全为0。 所以对任意1<r壬p,都有pmod r与(p+q)modr不全为0,因此它们的最大公约 数为1,即是最简分数。虽然这是个要求 anJ (即勺)是最简分数的结论,但由于数 _ _ ,1 ……,, 一 “ 一……,, 一,, ,一,, 列第二项为1,是最简分

文档评论(0)

189****2507 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档