- 1、本文档共71页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
递归算法详解.pdf
递 归
冯文科
一、递归的基本概念。
一个函数、概念或数学结构,如果在其定义或说明内部直接或间接地出现对其本身的引
用,或者是为了描述问题的某一状态,必须要用至它的上一状态,而描述上一状态,又必须
用到它的上一状态……这种用自己来定义自己的方法,称之为递归或递归定义。在程序设计
中,函数直接或间接调用自己,就被称为递归调用。
二、递归的最简单应用:通过各项关系及初值求数列的某一项。
在数学中,有这样一种数列,很难求出它的通项公式,但数列中各项间关系却很简单,
于是人们想出另一种办法来描述这种数列:通过初值及a 与前面临近几项之间的关系。
n
要使用这样的描述方式,至少要提供两个信息:一是最前面几项的数值,一是数列间各
项的关系。
比如阶乘数列
1、2、6、24、120、720……
如果用上面的方式来描述它,应该是:
⎧1,n=1
a = ⎨
n na ,n1
⎩ n−1
如果需要写一个函数来求a 的值,那么可以很容易地写成这样:
n
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,返回上
1
一步,得 f(2) = 2* f(1)= 2,再返回上一步,得 f(3)= 3* f(2)= 3*2= 6,从而得最
终解。
用图解来说明,就是
f(3)的执行过程 f(2)的执行过程 f(1)的执行过程
(特殊值判断:) (特殊值判断:) (特殊值判断:)
3≠1,继续向下。 2≠1,继续向下。 1=1,由特殊情
(递归关系处理:) (递归关系处理:) 况出口直接返回1。
求3* f(2),需要先 求2* f(1),需要先
计算 f(2),调用 f(2), 计算 f(1),调用 f(1),
且本身挂起…… 且本身挂起……
…… ……
…… ……
得到 f(2) = 2,由正 得到 f(1)=1,由正
常出口返回3*2 常出口返回2*1
下面再看一个稍复杂点的例子。
【例1】数列{a }的前几项为
n
1 1 1
1、 、 、 、……
1+1 1 1
您可能关注的文档
最近下载
- 通桥(2017)2101-Ⅱ时速160公里客货共线铁路预制后张法简支T梁24m.pdf
- 胡壮麟《语言学教程》(第5版)@第七章@复习笔记.pdf
- 2018年中级经济师考试《保险专业知识与实务》电子书.pdf VIP
- 公路收费站(所)风险管控清单.docx VIP
- 君正化工杜邦安全管理理念实施方案.pptx
- 在线网课学习课堂《空间句法与数据化设计——环境行为数据分析及设计应用》单元测试考核答案.docx
- 全面从严治党主体责任约谈资料汇编.docx VIP
- 2024年华为认证HCIA-5G(H35-660)考试题库(附答案).pdf VIP
- 《Web 程序设计》说课.ppt
- 数字经济-第1篇.pptx
文档评论(0)