递归解题步骤
- 当前层进行处理
- 分派给下一层(if……else……根据不同的情况进行分派。if……else……进行剪枝。)
- 当前层处理从下一层返回的结果(对返回的结果进行加减乘除算数运算或者与或非逻辑运算等等,有时还要与当前层的处理结果一并进行处理)
- 返回给上一层(return)
当递归的返回值是void时,解题步骤只需包含前两步就足够了。当递归有返回值时,需要包含完整的四步骤。
递归的有效性
递归函数每一层看起来只做了很少的事。但是,由于递归函数中经常多次调用自身,递归函数的传销模式其实是很可怕的,假设一个递归中调用自身两次,那么这已经是一个细胞分裂级别的指数增长,即便每个节点什么也不处理,只是单纯的分派给下一层,当到了最后一层时,不得不在结束条件时进行处理,这时候 的节点已经非常之多,每个节点只需做很少的事,整体上就可以完成一个很宏伟的事。
记忆化递归的必要性
同样由于递归的传销模式,当某次分派出现重复子问题时,意味着这个重复的子问题并非被重复计算一次,而是很多次,所以需要记忆化递归解决这种重复子问题。
- 记忆化递归很好理解,就是将每次递归函数的<参数,返回值>对应存起来,可以用数组,也可以用map,根据题目要求灵活选取。
递归函数的执行顺序
想象给你一颗解空间树,从根节点开始,一笔画将所有节点连接起来,最后返回根节点。
那么一笔画连接的顺序其实就是递归函数的执行顺序。