什么是递归
- 递归是解决问题的一种方式
- 递归逻辑符合计算机计算习惯
递归适用场景
- 问题A可以分解为多个子问题
- 子问题和问题A之间除了数据规模不同,解决思路完全一致
- 存在退出机制
- 以上,编写递归代码步骤:
- 找到递归递推公式
- 确认递归退出条件
- 翻译成代码
其他
- 无需逐步分析递归的层层的调用,这样容易钻牛角尖
- 递归的问题:
- 递归深度大,导致大量压栈操作,栈空间有限,可能导致堆栈溢出
- 递归深度大,导致函数调用耗时过多,空间复杂度高(函数临时变量入栈)
- 递归容易出现重复计算(问题层层分解后可能分解出多个完全相同的问题)
- 递归问题的规避:
- 堆栈溢出,最好事先预测递归调用深度范围,1)对超出范围的情况做异常抛出 2)手动实现更大空间的栈及相关操作
- 控制递归深度,控制耗时和空间复杂度,综合考虑如不可避免,需进行算法优化(针对具体问题具体优化)
- 重复计算,使用散列表或类似数据结构存储问题计算结果,计算问题前先到散列表中查询是否已存在计算结果,避免重复计算。该方法属于空间换时间的逻辑
- 递归需要多多练习!!!