数据结构与算法(5.递归方法论)
in Posts / Algorithm
数据结构与算法(5.递归方法论)
0. 递归衍变
- 普通递归: 自下而上
- 尾递归(优化内存堆栈): 自上而下(附带中间参数)
- 循环
招式:
- 基本情况, 即跳出条件
- 递推关系, 即相关变量计算, 也是中间变量处理
- 循环判断基本情况, 优化成循环
1. 自下而上
- 寻找递归递推关系
- 寻找递归基本情况,跳出时返回基本情况的结果
- 修改递归函数的参数
- 递归调用并返回中间变量
- 使用递归函数的返回值与当前参数进行计算,并返回最终结果
返回值 f(参数) {
if (基本情况条件) return 基本情况的结果;
修改参数;
返回值 = f(参数);
最终结果 = 根据参数与返回值计算
return 最终结果;
}
2. 自上而下
- 寻找递归递推关系
- 创建新函数,将「自下而上」中的最终结果计算依赖的中间变量提取为函数的参数
- 寻找递归基本情况,跳出时返回基本情况的结果与中间变量的计算结果(最终结果)
- 根据函数参数与中间变量重新计算出新的中间变量
- 修改参数
- 递归调用并返回(该处的返回由基本情况触发)
返回值 f(参数,中间变量) {
if (基本情况条件) return 基本情况的结果与中间变量的计算结果;
中间变量 = 根据参数与中间变量重新计算
修改参数;
return f(参数,中间变量);
}