您的位置:首页 > 编程语言

10-递归 如何用三行代码找出"最终推荐人"

2018-10-14 17:12 127 查看

如何理解"递归"?

  • 应用的场景:DFS 深度优先搜索、前中后序二叉树遍历
  • 递归两个字拆分来看,一个接着一个地去问,最后传来答案
f(n)=f(n-1)+1 其中,f(1)=1

递归需要满足三个条件

什么样的问题可以用递归来解决呢?

  • 一个问题的解可以分解为几个子问题的解
  • 这个问题与分解问题之后的子问题,除了数据规模不同,求解思路完全一样
  • 存在递归终止条件

如何编写递归代码

  • 关键是写出递推公式,找出终止条件
  • 递归正确的四维方式:如果一个问题 A 可以分解为若干子问题 B、C、D,你可以假设子问题 B、C、D 已经解决,在此基础上思考如何解决问题 A。而且,你只需要思考问题 A 与子问题 B、C、D 两层之间的关系即可,不需要一层一层往下思考子问题与子子问题,子子问题与子子子问题之间的关系。屏蔽掉递归细节,这样子理解起来就简单多了。

递归代码要警惕堆栈溢出

  • 解决堆栈溢出的方法,通过限制递归调用的最大深度方式来解决这个问题

但是这个问题又 不是太实用

递归代码要警惕重复计算

通过散列表来解决重复计算的问题

怎么将递归代码改写为非递归代码

使用循环来解决上面的问题,但是本质没有改变,徒增了实现的复杂度

在IDE中调试递归

1.打印日志发现,递归值。
2.结合条件断点进行调试。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: