暴力递归:
1,把问题转化为了规模缩小了的同类问题的子问题
2,有明确的不需要继续进行递归的条件(base case)
3,有当得到了子问题的结果之后的决策过程
4,不记录每一个子问题的解
例如:
public static int getMin(int[] arr, int L, int R){
if(L == R){
return arr[L];
}
int mid = (L + R)/2;
int leftMin = getMin(arr,L,mid);
int rightMin = getMin(arr,mid+1,R);
return Math.min(leftMin,rightMin);
}
动态规划:
1,从暴力递归中来
2,将每一个子问题的解记录下来,避免重复计算
3,将暴力递归的过程,抽象成了状态表达
4,并且存在化简状态表达,使其更加简洁的可能。