递归

递归

思维要点

  1. 不要人肉进行递归(最大误区)

  2. 找到最近最简方法,将其拆解成可重复解决的问题(重复子问题)

  3. 数学归纳法思维

  4. 递归每一层的逻辑环境都一样,不影响前后每一层

模板:

  1. 首先规定递归什么时候结束,一定要限制条件,不能无限循环
  2. 递归的执行逻辑,当前层的执行逻辑,即重复性思维,重复性处理,找相似性
  3. 递归调用,层数加1,进入下一层
  4. 最后清除,如果有涉及到外部逻辑的

python模板

1
2
3
4
5
6
7
8
9
10
def recursion(level, param1, param2, ...):
# recursion terminator递归跳出条件
if level > MAX_LEVEL:
process_result
return
# process logic in current level 当前层的执行逻辑
process(level, data...)
# drill down
self.recursion(level + 1, p1, ...) 递归调用
# reverse the current level status if neede 清除收尾

GO模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func recursion(level int, param1, param2 interface{}) {
// recursion terminator递归跳出条件
if level > MAX_LEVEL {
process_result
return
}

// process logic in current level 当前层的执行逻辑
process(level, data...)

// drill down递归调用
recursion(level + 1, p1, ...)

// reverse the current level status if neede 清除收尾
}