找回密码
 立即注册
收起左侧

C++老鸟日记011 递归的含义及注意事项

2
回复
5222
查看
[复制链接]
累计签到:41 天
连续签到:1 天
来源: 原创 2018-9-5 18:02:06 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 baizy77 于 2018-10-1 20:48 编辑

版权声明
---------------------------------------------------------------------------------------------------------------------
该文章原创于Qter开源社区(www.qter.org
作者: 女儿叫老白 (白振勇)
转载请注明出处!
---------------------------------------------------------------------------------------------------------------------
本套课程属于:《C++跨平台开发干货》系列课程。
-----------------------------------------------------------------------------

引言
-----------------------------------------------------------------------------
       在软件研发过程中,我们有时会碰到函数需要不断的循环调用自己才能完成相应的功能,这我们成为递归,今天我们就来讨论一下。

正文
-----------------------------------------------------------------------------
递归在C++语言中不太常用。偶尔会碰到递归函数。简单来说,递归的含义是循环调用自己的函数,当然如果一直循环调用自身,那么程序肯定死循环了,因此在递归函数中,需要提供一个判断条件来终止递归调用。
递归的编程方法本身比较简单。比如:
// node.h
// 获取顶层父节点
CNode* CNode ::getTopLevelParent ()
{
if (NULL ==getParent()) {
return this;
} else {
       returngetParent()->getTopLevelParent();
}
}
实用递归时的注意事项:
1. 递归需要有一个终止条件,否则将无限循环的运行下去,直到耗尽内存。
       比如上述代码中的:
if (NULL ==getParent()) {
return this;
2. 每一次函数调用都有堆栈开销(内存开销),递归调用也不例外,因此,如果递归层次非常深(简单说就是把自己调用了N遍),非常可能导致程序耗尽内存,导致崩溃。
3。递归调用的性能可能是个问题,在程序运行时,如果经常性调用递归函数,可能导致性能问题(CPU高,或者非常耗费CPU,导致其他工作也很慢)。
3.在C++11中,出现了新的语法,可以非常容易的实现递归调用,它采用缓存机制,把之前的代码执行结果进行缓存,将大大提高运行效率,感兴趣的coder可以查阅相关资料。

回复

使用道具 举报

累计签到:50 天
连续签到:1 天
2018-9-6 22:51:06 显示全部楼层
请问大神,   内存开销和缓存开销有什么区别?
回复 支持 反对

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-9-7 09:02:15 显示全部楼层
您好,我指的是同一个含义。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了