- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实用文案
标准文档
数据结构与算法分析论文
递归算法的讨论
学号 1415211013
姓名 李莉姗
班级 14电子1班
华侨大学电子工程系
递归算法的讨论
所谓递归算法是把问题转化为规模缩小了的同类问题的子问题。然后 HYPERLINK /view/1265506.htm \t _blank 递归调用函数(或过程)来表示问题的解。一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数)。递归过程一般通过函数或子过程来实现。递归方法:在函数或子过程的内部,直接或者间接地调用自己的算法。递归算法是一种直接或者间接地调用自身算法的过程。在 HYPERLINK /view/3314.htm \t _blank 计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。递归算法解决问题的特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。
(4) 在 HYPERLINK /view/1265506.htm \t _blank 递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成 HYPERLINK /view/2061755.htm \t _blank 栈溢出等。所以一般不提倡用递归算法设计程序。下面就让我们结合例子详细讨论一下递归算法。
一、递归算法的原理
递归算法简单的说就是在函数中调用函数自身,不断调用,直到满足函数得出计算结果(某个条件)。因为其需要不断循环的调用自身,所以称为递归调用。递归的原理,其实就是一个栈(stack),?比如求5的阶乘,要知道5的阶乘,就要知道4的阶乘,4又要是到3的,以此类推,所以递归式就先把5的阶乘表示入栈,?在把4的入栈,直到最后一个,之后呢在从1开始出栈,?看起来很麻烦,确实很麻烦,他的好处就是写起代码来,十分的快,而且代码简洁,其他就没什么好处了,运行效率出奇的慢。还有一个十分形象的例子:从前有座山,山里有个庙,庙里有个老和尚正在讲故事:从前有座山,山里有个庙,庙里有个老和尚正在讲故事:从前有座山,山里有个庙,庙里有个老和尚正在讲故事……如此循环往复到最终的要求。
递归分为2种,直接递归和间接递归。直接递归,比如方法A内部调用方法A自身。间接递归,比如方法A内部调用方法B,方法B内部调用方法C,方法C内部调用方法A。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。递归的三个条件:边界条件、递归前进段、递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
二、递归算法的用处
了解了递归算法的原理,那么什么时候需要用到递归算法呢?①问题的定义是递归的。有许多数学公式、数列的定义是递归的,例如求n!和Fibonacci数列等。这些问题的求解的过程可以将其递归定义直接转化为对应的递归算法。
例如阶乘函数的定义
1 当n=0时
n!=
n*(n-1)*…*1 当n0时
这时候递归的定义可以用如下的函数表示:
1 当n=0时
f(n)=
n*f(n-1) 当n0时
也就是说,函数f(n)的定义用到了自己本身f(n-1)。
②数据结构是递归的。
有些数据结构是递归的。例如,第2章中介绍过的单链表就是一种递归数据结构,其结点类型定义如下:
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LinkList;
该定义中,结构体LNode的定义中用到了它自身,即指针域next是一种指向自身类型的指针,所以它是一种递归数据结构。 对于递归数据结构,采用递归的方法编写算法既方便又有效。例如,求一个不带头结点的单链表head的所有data域(假设为int型)之和的递归算法如下:
您可能关注的文档
最近下载
- 2025中国中医科学院中医药健康产业研究所 (江西中医药健康产业研究院) 招聘事业编制人员18人笔试备考试题及答案解析.docx VIP
- 预算编制的时间安排.pptx
- T∕COSOCC 014-2024 信息技术应用创新 经营管理系统数据管理技术规范.pdf VIP
- 《装备测试性工作通用要求GJB 2547B-2024》知识培训.pptx VIP
- 全电路欧姆定律.ppt VIP
- 王立群读《史记》之汉代风云人物——项羽 鸿门宴.doc VIP
- 小学与初中数学课程衔接的研究教学研究课题报告.docx
- 幕墙工程完整的清单报价.xls VIP
- 专题4平行线中的翻折求角度问题及角度之间的关系(原卷版+解析).docx VIP
- 版义务教育《艺术音乐课程标准》测试题含答案(荐).docx VIP
文档评论(0)