递归满足的三个条件:
1,一个问题的解可以分解为几个子问题的解。
2,这个问题和分解之后的子问题,除了数据规模不同,求解思路完全一样。
3,存在递归的终止条件。
如何编写递归代码?
写出地推公式,找到终止条件。关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递归公式。然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。不用想一层一层的调用关系,不要试图用人脑去分解递归的每一个步骤。
递归代码要警惕堆栈溢出。
函数调用会使用栈来保存临时变量,每调用一个函数都会将临时变量封装为栈帧压入内存栈,等函数执行完成返回后才出栈。系统栈和虚拟机栈一版都不大,如果递归求解的数据规模很大,调用层次很深一直压栈,就会有堆栈溢出的风险。
递归代码要警惕重复计算,所有的递归代码都可以改成这种迭代循环的非递归算法。
网友评论