05:递归
1、递归==》DFS深度优先搜索、前中后序二叉树遍历
递归求解问题的分解过程==》去的过程叫“递”,回来的过程叫“归”,基本上,所有的递归问题都可以用递推公式来表示
2、递归需要满足的三个条件==》
一个问题的解可以分解为几个子问题的解
这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
存在递归终止条件
3、递归代码==》递推公式,终止条件 找到将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最终将递推公式和终止条件翻译成代码
台阶问题==》f(n) = f(n-1) + f(n-2) f(1) = 1 f(2) = 2
4、递归问题==》如果一个问题A可以分解为若干子问题B、C、D,可以假设子问题B、C、D已经解决,在此基础上思考如何解决问题A。而且,只需要思考问题A与子问题B、C、D两层之间的关系即可,不需要一层一层往下思考子问题与子子问题,子子问题与子子子问题之间的关系
5、递归代码要警惕堆栈溢出
6、递归代码要警惕重复计算==》为了避免重复计算,可以通过一个数据结构(比如散列表)来保存已经求解过的f(k)。当递归调用到f(k)时,先看下是否已经求解过了。如果是,则直接从散列表中取值返回,不需要重复计算
7、递归代码改为非递归代码==》迭代循环