码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构与算法之算法

时间:2020-01-31 14:09:51      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:代码   pre   结构   堆栈溢出   除了   div   递推   抽象   使用   

递归

递归需要满足的三个条件

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)

 

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

 

递归代码要警惕堆栈溢出

递归代码要警惕重复计算

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

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

 

 

 

 

 

 

数据结构与算法之算法

标签:代码   pre   结构   堆栈溢出   除了   div   递推   抽象   使用   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!