何为递归
去的过程叫“递”,回来的过程叫“归”
满足的三个条件
- 一个问题的解可以分解为几个子问题的解
- 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
- 存在递归终止条件
关键
找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。
编写递归代码的关键是,只要遇到递归,我们就把它抽象成一个递推公式,不用想一层层的调用关系,不要试图用人脑去分解递归的每个步骤。
注意事项
- 堆栈溢出(空间复杂度)
- 重复计算
- 时间复杂度(函数调用次数)
是否可将递归改为非递归
理论上可以,手动完成出栈、入栈过程
如何调试规模比较大、递归层次很深的递归代码
- 打印日志发现,递归值。
- 结合条件断点进行调试。