- 递归与动态规划的比较
- 当递归中只有一部分未解决如 例1 所示时,使用递归比使用动态规划更方便快捷。
- 当递归中两部分甚至更多都为解决如 例2 所示时,使用动态规划比使用递归更快。
当递归中出现两部分未解决时,使用递归会重复计算子问题,增加程序的时间复杂度。
当仅有一部分未解决时,相当于一层循环,使用递归程序简洁。
// 例 1 以 1 到 n 的和为例 (递归)
static int f(int n){
if(n == 1) return 1;
return n + f(n-1);
}
// 例 2 以斐波那契数列为例 (递归)
static int f2(int n){
if(n < 3) return 1;
return f2(n-1) + f2(n-2);
}
// 例 3 以斐波那契数列为例 (动态规划)
static int f3(int[] f){
f[0] = 1;
f[1] = 1;
for(int i = 2; i < f.length; i++){
f[i] = f[i-1] + f[i - 2];
}
return f[f.length - 1];
}