首页 > 编程语言 > 详细

数据结构与算法之算法

时间:2020-01-31 13:44:46      阅读:47      评论:0      收藏:0      [点我收藏+]

递归

递归需要满足的三个条件

1.一个问题的解可以分解为几个子问题的解

2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样

3. 存在递归终止条件

 

假如这里有 n 个台阶,每次你可以跨 1 个台阶或者 2 个台阶,请问走这 n 个台阶有多少种 走法?如果有 7 个台阶,你可以 2,2,2,1 这样子上去,也可以 1,2,1,1,2 这样子 上去,总之走法有很多,那如何用编程求得总共有多少种走法呢?
#
所以当 n个台阶的总走法是 是 f(n-1)个走法  + f(n-2)个走法
f(n) =f(n-1) +f(n-2)

 

因此,编写递归代码的关键是,只要遇到递归,我们就把它抽象成一个递推公式,不用想一 层层的调用关系,不要试图用人脑去分解递归的每个步骤。

 

递归代码要警惕堆栈溢出

递归代码要警惕重复计算

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

那是不是所有的递归代码都可以改为这种迭代循环的非递归写法呢?
笼统地讲,是的。因为递归本身就是借助栈来实现的,只不过我们使用的栈是系统或者虚拟 机本身提供的,我们没有感知罢了。如果我们自己在内存堆上实现栈,手动模拟入栈、出栈 过程,这样任何递归代码都可以改写成看上去不是递归代码的样子。

 

 

 

 

 

 

数据结构与算法之算法

原文:https://www.cnblogs.com/xzqpy/p/12245084.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!