| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 527 人关注过本帖
标题:关于递归
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏
 问题点数:0 回复次数:3 
关于递归
对递归的讲解,参阅如下内容足矣:
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

2015-04-11 03:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
递归的本质是自己调用自己。要理解这个问题,先看一看函数的调用过程:函数A调用B,它自己并没有结束,本身所占用的资源仍然存在,这个时候它调用B,首先要保存自身的环境,然后跳转,开辟新的空间执行被调用的函数B,这个时候,栈被占用的资源是A+B,如果B再调用函数C,则是A+B+C,如此不断往里钻入,栈不断缩减;再看另外一种情形,在函数A中,依次调用函数B和函数C,这与前面有区别,在函数B执行完毕之后,资源被释放,然后再调拨资源执行函数C,这种情形,资源的占用不是往深入钻的。搞明白了这两种函数调用的原理,就明白人家为什么说,编程的时候函数要尽量发散。

递归是典型的第一种情形,它调用自身,此时自己还未结束,它要等被调用的函数执行完毕之后,自己才会完毕,所以递归的显著特征,是后进先出,后执行的函数先獲得结果,前面的函数才等獲得结果,最先的函数,最后获得输出。这是不断深入、积累占用资源的情况,每调用一次自己,空间加一倍,如果调用函数一次,分配不少的栈资源,那么栈空间很快会消耗干净,尤其在较大型的程序中,这个递归不知道在栈的哪个深度上启动,若迭代次数还要很多,那么资源的耗费是很可观的。注意:调用函数是要消耗时间的!诸如执行阶乘、字符串倒序之类简单的任务来说,递归调用函数的开销比直接的循环代码大得多,也慢得多,是最低效无能的方案。

递归要怎么用?要用得其所!千万不要滥用,更不要当屠龙术去苦练。在追求效率的程序员角度看来,递归是最后的方案,迫不得已时采用。凡是搞优化,首先是拿递归开刀。

授人以渔,不授人以鱼。
2015-04-11 04:05
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
递归应该是一个很优雅的算法,处理有相同类型数据组成的大数据时,代码简练,执行高效,如链表、树形目录等。函数递归的确受限于栈空间,我曾经用递归做颜色填充,一般到6000层左右即溢出(也取决于函数里定义的变量多少)。递归算法肯定不能滥用,什么时候用、怎么用能体现程序员的老练程度和设计算法的能力。

能编个毛线衣吗?
2015-04-11 09:25
ping362421
Rank: 2
等 级:论坛游民
帖 子:24
专家分:10
注 册:2012-6-25
收藏
得分:0 
BOM展开功能要用的吧

VFP IS ROCK
2015-08-20 17:13
快速回复:关于递归
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020189 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved