algo/notes/10_recursion/readme.md
2018-10-12 08:31:43 +08:00

29 lines
686 B
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 递归
## 三个条件
* 可分解为子问题
* 子问题与原问题解法一致,只有规模上的不同
* 有终止条件
## 写递归代码
* 整理出递推公式
* 确定好终止条件
* 「翻译」成代码
关键:
> 只要遇到递归,我们就把它抽象成一个递推公式,不用想一层层的调用关系,不要试图用人脑去分解每一个步骤。
## 警惕
* 堆栈溢出 <- 递归深度过大
* 重复计算 <- 递归过程中的不同分支重复计算相同子问题
* 保存子问题结果map/dict
* 空间复杂度高 <- 递归函数调用带来的消耗
## 递归改写非递归
本质人肉模拟函数调用堆栈