- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
递归与循环的优缺点
递归与循环的优缺点(转载)?? 2011-08-24 17:49:40|??分类: HYPERLINK /blog/ \l m=0t=1c=fks_084064080081082066082084094095085084081064086095080074083 \o 算法数据结构 算法数据结构 |??标签: |字号大中小?订阅 递归的话函数调用是有开销的,而且递归的次数受堆栈大小的限制。?以二叉树有哪些信誉好的足球投注网站为例:?bool search(btree* p, int v)?{?if (null == p)?return false;?if (v == p-v)?return true?else?{?if (v p-v)?return search(p-left, v);?else?return search(p-right, v);?}?}?如果这个二叉树很庞大,反复递归函数调用开销就很大,万一堆栈溢出怎么办??现在我们用循环改写:?bool search(btree* p, int v)?{?while (p)?{?if (v == p-v)?return true;?else?{?if (v p-v)?p = p-left;?else?p = p-right;?}?}?return false;?} --------------------------------------------------------------------------------------------------------- 递归好处:代码更简洁清晰,可读性更好?递归可读性好这一点,对于初学者可能会反对。实际上递归的代码更清晰,但是从学习的角度要理解递归真正发生的什么,是如何调用的,调用层次和路线,调用堆栈中保存了什么,可能是不容易。但是不可否认递归的代码更简洁。一般来说,一个人可能很容易的写出前中后序的二叉树遍历的递归算法,要写出相应的非递归算法就比较考验水平了,恐怕至少一半的人搞不定。所以说递归代码更简洁明了。?递归坏处:由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。?楼上的有人说:?小的简单的用循环,太复杂了就递归吧,,免得循环看不懂?话虽然简单,其实非常有道理:对于小东西,能用循环干嘛要折腾?如果比较复杂,在系统撑的住的情况下,写递归有利于代码的维护(可读性好)?另:一般尾递归(即最后一句话进行递归)和单向递归(函数中只有一个递??调用地方)都可以用循环来避免递归,更复杂的情况则要引入栈来进行压栈出栈来改造成非递归,这个栈不一定要严格引入栈数据结构,只需要有这样的思路,用数组什么的就可以。?至于教科书上喜欢n!的示例,我想只是便于递归思路的引进和建立。真正做代码不可能的。 -------------------------------------------------------------------------------------------------------------------- 循环方法比递归方法快, 因为循环避免了一系列函数调用和返回中所涉及到的参数传递和返回值的额外开销。?递归和循环之间的选择。一般情况下, 当循环方法比较容易找到时, 你应该避免使用递归。这在问题可以按照一个递推关系式来描述时, 是时常遇到的, 比如阶乘问题就是这种情况。 反过来, 当很难建立一个循环方法时, 递归就是很好的方法。实际上, 在某些情形下, 递归方法总是显而易见的, 而循环方法却相当难找到。当某些问题的底层数据结构本身就是递归时, 则递归也就是最好的方法了。 --------------------------------------------------------------------------------------------------------------------------- 递归其实是方便了程序员难为了机器。它只要得到数学公式就能很方便的写出程序。优点就是易理解,容易编程。但递归是用栈机制实现的(c++),每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销。所以在深度大时,它的时空性就不好了。?循环其缺点就是不容易理解,编写复杂问题时困难。优点是效率高。运行时间只因循环次数增加而增加,没什么额外开销。空间上没有什么增加。 ------------------------------------------------------
您可能关注的文档
- 资本运营案例分析1.doc
- 资源信息考试整理.doc
- 走进青春期的孩子.doc
- 赵继勋近期有关鸡病应关注的一些问题.doc
- 赶会作文数篇.doc
- 质量(2-1方差分析).doc
- 起名要注意那些啊起名忌讳十点.doc
- 购买笔记本需要注意的8件事.doc
- 起重机吊装管理规定.doc
- 货运备课4.doc
- 2025年无人机低空医疗物资投放社会效益报告.docx
- 2025年再生塑料行业包装回收利用产业链重构研究.docx
- 《AI眼镜周边产品市场机遇:2025年终端销售与需求增长洞察》.docx
- 2025年坚果加工行业深加工技术突破与市场拓展策略报告.docx
- 2025年通信芯片行业技术竞争与未来趋势报告.docx
- 《2025年生鲜电商配送冷链事故分析与预防措施》.docx
- 《商业航天融资新趋势2025民营卫星企业资本涌入估值分析市场动态》.docx
- 2025年能源绿色健康行业创新技术与市场应用报告.docx
- 2025年无人机低空医疗救援通信方案分析报告.docx
- 2025年烹饪机器人行业市场集中度分析报告.docx
最近下载
- 煤化工酚氨回收课件.ppt VIP
- 2023年度教师招聘考试《教育心理学》典型题题库及答案 .pdf VIP
- 2025年中考历史全国真题分类汇编:世界现代史.doc VIP
- 《项目管理课件:工程资料管理之道》.ppt VIP
- 牛津译林版必修 第一册Unit 4 Looking good, feeling good Reading 课件(共42张PPT)(含音频+视频).pptx VIP
- 武汉市2016年中考英语试题及答案.docx VIP
- 举升机的使用幻灯片.ppt VIP
- 2023年度广东省教师招聘考试《教育心理学》典型题题库及答案.pdf VIP
- 分式练习题_初二数学《分式》练习题.doc VIP
- 完整版《“十五五”规划建议》全文解读PPT.pptx
有哪些信誉好的足球投注网站
文档评论(0)