算法-01-递归

1-理解递归

      斐波那契数列(Fibonacci sequence),又称黄金分割数列 ,以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……特点是 从第三个数开始,第n个数的数值是 前面两个数相加得来。形成公式f(n)=f(n-1)+f(n-2)。这就是递归。

       递归算法(recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。

满足递归的三个条件:
1.一个问题的解可以分解为几个子问题的解;
2.这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样;
3.存在递归终止条件。

2-编写递归代码

       写递归代码最关键的是写出递推公式,找到终止条件就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。

       斐波那契数列的定义是 f(n)=f(n-1)+f(n-2),生成第 n项的做法:把 f(n)问题的计算拆分成 f(n−1)和 f(n−2) 两个子问题的计算,并递归,以 f(0) 和 f(1)为终止条件。

3-警惕递归问题和缺点

警惕无限循环导致栈溢出:在编写的时候要找好递归的终止条件,防止无限循环调用导致的栈溢出;在实际业务中,我们可以约定递归的最大深度,这样也可以防止无限循环调用问题。

警惕重复计算问题:如果按照章节2的思路编写,会有大量的重复计算问题,我们可以考虑思路将已经计算的缓存起来(后续还有其他的算法解决方法,后续讲解),下次直接使用就行,这样就避免大量重复计算问题。


 

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值