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

微信公众号: 星点课堂

新浪微博:女儿叫老白

网易云课堂:女儿叫老白

网易云课堂免费课程:《C++跨平台开发中的编译错误》

-----------------------------------------------------------------------------

递归在C++语言中不太常用。偶尔会碰到递归函数。简单来说,递归的含义是循环调用自己的函数,当然如果一直循环调用自身,那么程序肯定死循环了,因此在递归函数中,需要提供一个判断条件来终止递归调用。

递归的编程方法本身比较简单。比如:

// node.h

// 获取顶层父节点

CNode* CNode ::getTopLevelParent ()

{

if (NULL == getParent()) {

return this;

} else {

       return getParent()->getTopLevelParent();

}

}

实用递归时的注意事项:

1. 递归需要有一个终止条件,否则将无限循环的运行下去,直到耗尽内存。

       比如上述代码中的:

if (NULL == getParent()) {

return this;

2. 每一次函数调用都有堆栈开销(内存开销),递归调用也不例外,因此,如果递归层次非常深(简单说就是把自己调用了N遍),非常可能导致程序耗尽内存,导致崩溃。

3。递归调用的性能可能是个问题,在程序运行时,如果经常性调用递归函数,可能导致性能问题(CPU高,或者非常耗费CPU,导致其他工作也很慢)。

3.在C++11中,出现了新的语法,可以非常容易的实现递归调用,它采用缓存机制,把之前的代码执行结果进行缓存,将大大提高运行效率,感兴趣的coder可以查阅相关资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

女儿叫老白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值