avatar

Catalog
递归详解

递归解题步骤

  • 当前层进行处理
  • 分派给下一层(if……else……根据不同的情况进行分派。if……else……进行剪枝。)
  • 当前层处理从下一层返回的结果(对返回的结果进行加减乘除算数运算或者与或非逻辑运算等等,有时还要与当前层的处理结果一并进行处理)
  • 返回给上一层(return)

当递归的返回值是void时,解题步骤只需包含前两步就足够了。当递归有返回值时,需要包含完整的四步骤。

递归的有效性

递归函数每一层看起来只做了很少的事。但是,由于递归函数中经常多次调用自身,递归函数的传销模式其实是很可怕的,假设一个递归中调用自身两次,那么这已经是一个细胞分裂级别的指数增长,即便每个节点什么也不处理,只是单纯的分派给下一层,当到了最后一层时,不得不在结束条件时进行处理,这时候 的节点已经非常之多,每个节点只需做很少的事,整体上就可以完成一个很宏伟的事。

记忆化递归的必要性

同样由于递归的传销模式,当某次分派出现重复子问题时,意味着这个重复的子问题并非被重复计算一次,而是很多次,所以需要记忆化递归解决这种重复子问题。

  • 记忆化递归很好理解,就是将每次递归函数的<参数,返回值>对应存起来,可以用数组,也可以用map,根据题目要求灵活选取。

递归函数的执行顺序

想象给你一颗解空间树,从根节点开始,一笔画将所有节点连接起来,最后返回根节点。

那么一笔画连接的顺序其实就是递归函数的执行顺序。

Author: realLiuSir
Link: http://yoursite.com/2020/08/24/%E9%80%92%E5%BD%92%E8%AF%A6%E8%A7%A3/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶