从斐波那契数列讲解算法设计的思路

本文从斐波那契数列出发,探讨了递归算法设计思路,包括如何从递归到动态规划,并介绍了动态规划的四个关键步骤。文章还提到了分治和贪心算法,指出它们与动态规划的区别和应用场景。
摘要由CSDN通过智能技术生成

从斐波那契到递归

  很多人在开始学计算机程序设计类的课程时,都听过一个再经典不过的例子,那就是斐波那契数列,也称兔子数列。为什么叫兔子数列呢,我们知道算法的研究当然是为了解决问题,这个问题越实际,这个算法的意义也就越大,而斐波那契数列的求解算法也应该有自己实际所需要解决的问题,这个问题最早开始就是兔子生长数目问题。
  问题说的是,有一对刚出生的兔子,两个月后每对刚出生的兔子又能诞生下一对兔子,假设兔子永远不会死去,并且只要出生的兔子过了两个月就可以一直生小兔子,现在问过了 n n n个月一共有多少对兔子。
  通过对这个问题的分析我们就可以得出一个条件,第 n n n个月的兔子有两个来源,第一个来源是 n − 1 n-1 n1月就有的兔子,第二个来源就是这个月刚出生的兔子,如果把兔子的总数量当成关于 n n n的函数,第n个月兔子的数量记成 f ( n ) f(n) f(n)。我们惊奇的发现,第 n − 1 n-1 n1月出生的兔子到第 n 个 n个 n月还不能生兔子,所以出生的兔子都是之前出生的兔子生的,那就是前 n − 2 n-2 n2个月兔子生的,每对兔子可诞生一对,那就意味着第 n n n个月出生的兔子数量就等于 f ( n − 2 ) f(n-2) f(n2),两部分我们都表示出来了,我们就得到了大名鼎鼎的斐波那契数列的递归表达式, f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n)=f(n-1)+f(n-2) f(n)=f(n1)+f(n2),光有这个表达式还足够我们解决问题,我们应该注意到第一个月只有一对兔子,第二个月这对兔子还不生产,所以第二个月也只有一对兔子,即 f ( 1 ) = 1 , f ( 2 ) = 1 f(1)=1,f(2)=1 f(1)=

  • 11
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值