您的位置:首页 > 其它

记一次递归调用问题

2013-12-18 00:00 190 查看
这几天服务器因为一个递归调用导致堆栈溢出,down掉几次!

个人觉得递归调用有时候会存在着隐性的隐患,程序不一定适应所有的数据集,当某个数据集不满足递归结束条件时便容易出现死循环,你不可能枚举所有数据进行测试,这也是我不太钟情于递归的原因。

但是某些情景下你不得不去使用递归,例如在一个文件夹中查找文件,在这个文件夹中有N多个文件夹和文件,这个时候你不知道有多少层文件夹和文件的情况下。

当然递归也存在一定的优点,它让代码更加简洁,缺点就是当递归次数较大时,系统开销也增加。在系统中能用while和for代替的,尽量不要使用递归,我想在不得不使用递归的时候,需要从下面几个方面去避免存在的死循环。

1.代码审查,确认退出递归的出口条件能够实现

2.虽然不知道递归调用的次数,但是可以增加一个上限递归次数与递归结合使用,通常需要与具体的业务结合在一起,譬如递归员工的上级,以某个上限N去限定这个深度,超过这个深度就退出递归,通常这点随需求的变化而变化,敏捷度不高。

总结:能把递归转化为循环的,尽量使用循环实现,实在转不了,结合具体业务分析。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归 死循环