一、递归(Recursion)
- 从前有个山
- 山里有个庙
- 庙里有个和尚讲故事
- 返回1
计算 n!
n!= 1 * 2 * 3 * … * n
public int Factorial(n):
if n <= 1:
return 1
return n * Factorial(n — 1)
二、递归代码模板(Recursive Code Template)
public void recur(int level, int param) {
// terminator(终结递归条件)
if (level > MAX_LEVEL) {
// process result
return;
}
// process current logic(处理当前逻辑)
process(level, param);
// drill down(到下一层)
recur( level: level + 1, newParam);
// restore current status(恢复当前状态)
}
三、递归总结(Recursive Summary)
- 不要人肉进行递归(最大误区)
- 找到最近最简方法,将其拆解成可重复解决的问题(重复子问题)
- 数学归纳法思维(例如当n=1和n=2时成立,你也能证明n=n和n=n+1成立)