To iterate is human, to recurse, divine.
人理解迭代,神理解递归。
递归的基本思想是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。
一、递归的处理技巧
- 在求解递归方程时,通常会忽略一些技术细节,比如,假定自变量是整数,忽略上下取整符号;
- 通常会忽略递归方程的边界条件,对于足够小的n,将T(n)作是一个常数,令T(n)=Θ(1);
- 在有些特殊情况下,技术细节非常重要,需要重视上下取整符合和边界条件,期望得到更好的结论。
二、解递归的方法
代入法:
步骤:
- 猜测解的形式
- 数学归纳法证明
- 解出常数c,n0
例子:
T(n) = 4T(n/2) + 100n
- 认定 T(1) = Θ(1)
- 猜测解为 O(n^{3})
- 当 k < n时,假定 T(k) ≤ck3
- 数学归纳法证明 T(n) ≤cn3
当 c ≥ 200 c \geq 200