这几天服务器因为一个递归调用导致堆栈溢出,down掉几次!
个人觉得递归调用有时候会存在着隐性的隐患,程序不一定适应所有的数据集,当某个数据集不满足递归结束条件时便容易出现死循环,你不可能枚举所有数据进行测试,这也是我不太钟情于递归的原因。
但是某些情景下你不得不去使用递归,例如在一个文件夹中查找文件,在这个文件夹中有N多个文件夹和文件,这个时候你不知道有多少层文件夹和文件的情况下。
当然递归也存在一定的优点,它让代码更加简洁,缺点就是当递归次数较大时,系统开销也增加。在系统中能用while和for代替的,尽量不要使用递归,我想在不得不使用递归的时候,需要从下面几个方面去避免存在的死循环。
1.代码审查,确认退出递归的出口条件能够实现
2.虽然不知道递归调用的次数,但是可以增加一个上限递归次数与递归结合使用,通常需要与具体的业务结合在一起,譬如递归员工的上级,以某个上限N去限定这个深度,超过这个深度就退出递归,通常这点随需求的变化而变化,敏捷度不高。
总结:能把递归转化为循环的,尽量使用循环实现,实在转不了,结合具体业务分析。