Merge pull request #53 from Liam0205/notes

[Notes][10_recursive] 递归整理总结
This commit is contained in:
wangzheng0822 2018-10-12 17:51:45 +08:00 committed by GitHub
commit d2413d6925
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 0 deletions

0
notes/.gitkeep Normal file
View File

View File

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