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.结合条件断点进行调试。
相关文章推荐
- 菜鸟好文推荐(二十五)——如何编写更棒的代码:11个核心要点
- 如何更改CSDN博客高亮代码皮肤的样式,使博客看起来更有范(推荐)
- C#如何不使用递归实现无限层次结构的代码分享[转]
- 推荐 10 个超棒的 CSS3 代码生成工具
- 如何远程调试Python代码 推荐
- .NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(基础篇)
- 有1到10这个10个数,去除2个并打乱次序,如何找出那两个数?
- 10 款非常棒的CSS代码格式化工具推荐
- 大部分程序员每天只有10-12行代码能进入最终软件产品
- 如何让Ruby代码更简练?!(原文最终修订于 2006-08-18 下午02:42:25)
- 10 款非常棒的CSS代码格式化工具推荐
- 如何使用Python递归遍历项目找出重复的图片资源
- 如何快速找出网页中事件对应的js代码片段
- 10 款非常棒的CSS代码格式化工具推荐
- 三维扫描仪[10]——如何设计一台云台式扫描仪(代码详解)
- .NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(基础篇)
- foreach代码如何改造成递归
- 腾讯校招专场:研一学生如何用Python 500行代码面试,最终拿到25K月薪!
- 急求!vs10+opencv,如何在一张二值图中找出二维码的轮廓并提取出来然后进行识别啊?!
- .NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(进阶篇)