斐波那契数列

我想每个人都会写斐波那契数列吧!!

斐波那契数列的定义

f(0) = 1,f(1) = 1,f(n) = f(n-1) + f(n-2)

基于递归的方式实现,讲到递归都会用到:

def fib_sequence(n):def fib_rec(n):if n == 0 or n ==1:return nreturn fib_rec(n-1) + fib_rec(n-2)list = []for i in range(n):list += [fib_rec(i)]return list

斐波那契数列也是动态规划的常用范例,这个例子相当于直接告诉你了递推公式,子问题已经帮助你分解了。但是递归调用,出现了多个子问题重复,我们需要想办法优化,如何优化递归了?比较常用的基于递归,我们记录子问题的结果,假如调用到重复子问题就直接引用以计算的结果,这个就是备忘模型,因为还是基于递归,所以是自顶向下设计的:

def fib_top_down_(n):list = [-1]*(n)list[0] = 0list[1] = 1def fib_top_down(n):if list[n] == -1:list[n] = fib_top_down(n-1)+fib_top_down(n-2)return list[n]fib_top_down(n-1)return list

自顶向下设计,出现了多个子问题重复,我们需要想办法优化,还有一种可以优化的办法:遍历计算每一下子问题,从最小的子问题开始计算,这样就可以避免重复计算,这就是我们一般使用的迭代的方法,所以是基于自底向上推理的,又叫演绎模型:

#%%
def fib_botton_up_(n):list = [0,1]for i in range(2,n):list.append(list[i-1] + list[i-2])return list

运行结果:

#%%
print fib_sequence(20)
#%%
print fib_top_down_(20)
#%%
print fib_botton_up_(20)runfile('/root/test/dynamic_program.py', wdir='/root/test')
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]

动态规划:斐波那契数列里面的东西?相关推荐

  1. Python 实现 动态规划 /斐波那契数列

    1.斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为&quo ...

  2. 动态规划——斐波那契数列(70. 爬楼梯、198. 打家劫舍、213. 打家劫舍II、信件错排、母牛生产)

    递归和动态规划都是将原问题拆分成多个子问题然后求解,但是动态规划存储了子问题的解,不需要重复计算. 动态规划(Dynamic Programming,DP)需要转移方程和边界条件. 目录 一.70. ...

  3. 超级台阶 动态规划+斐波那契数列+打表(水题)

    描述 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法? 注:规定从一级到一级有0种走法. 输入 输入数据首先包含一个整数n(1<=n<=100), ...

  4. python侯先生爬楼梯_经典算法题:爬楼梯 ,以斐波那契数列来解题代码案例

    网上这题的解题思路主要有两种:动态规划 斐波那契数列 因为我们用斐波那契数列来解,所以我主要描述方法2. 斐波那契数列 又称 兔子数列, 指得是:1.1.2.3.5.8.13.21.--, 在数学上它 ...

  5. 斐波那契数列升级版(洛谷P2626题题解,C++语言描述)

    题目要求 题目链接 分析 首先是求斐波那契数列,这东西我就不说了,能看到这篇题解的你肯定会. 为什么要用数组呢?为了记忆化,防止重复算. 当然,由于本题是单查询,所以不必记忆化,但记忆化对多查询真的会 ...

  6. C语言 斐波那契数列1、1、2、3、5、8、13、21、34、……

    今天来介绍如何用C语言来输出斐波那契数列的前十项 #include "stdio.h" int fib(int n){return n==1||n==2?n=1:fib(n-1)+ ...

  7. 斐波那契数列的实现(简单递归和动态规划)

    斐波那契数列的实现(简单递归和动态规划) 一.简单递归的实现 1 #include "stdafx.h" 2 #include <string> 3 using nam ...

  8. 动态规划实现斐波那契数列求解

    int fibonacciDP1(int n) { // 动态规划不使用数组int a = 0;int b = 1;int sum;int i;if (n == 0)return 0;if (n == ...

  9. 八十八、从斐波那契数列和零一背包问题探究动态规划

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 本人看了vivo,阿里巴巴的校招算法题,可以明确知道绝对有动态规划. ...

最新文章

  1. SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因...
  2. 【LINUX 学习】Ext3 的三种日志记录方式
  3. markdown to html
  4. Call to undefined function Workerman\posix_getpid
  5. H264码流结构分析
  6. 【深度学习】Transformer 向轻量型迈进!微软与中科院提出两路并行的 Mobile-Former...
  7. 基于Kebernetes 构建.NET Core技术中台
  8. 超极本认知六大误区详解:不只是轻薄+长续航
  9. 多个异步之间的协作方案
  10. HBase之四--(1):Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询...
  11. python语言是一个优秀的面向对象语言_python是面向对象的语言吗
  12. python单例模式和装饰器
  13. centos7安装google浏览器
  14. java digester_digester解析xml文件
  15. 明源云与华为联合发起828 B2B企业节,共同成就好生意!
  16. OCL功率放大电路分析笔记
  17. php 红包过期退回,RabbitMQ功能实现1- 红包未领取退回
  18. 买了智能电视之后还需要购买搭配机顶盒吗?
  19. 银行账户存储系统C++
  20. 术业有专攻,数据库的 dba

热门文章

  1. adaboost mh matlab,Adaboost算法的前世今生
  2. mysql centos 源码安装_centos7源码安装mysql8
  3. php5.5 sqlserver 2012,PHP连接SQLSERVER2012
  4. rds基于什么开发_元王RDS--让H公司的10多年的设计经验重获新生!
  5. 黑苹果挂载不了分区_让黑苹果变得更完美——BCM94532HMB无线蓝牙接力完美驱动!...
  6. c语言程序设计运用,清华大学出版社-图书详情-《C语言程序设计及应用教程》...
  7. linux 查看系统函数库,教你在Linux操作系统中如何创建函数库
  8. spring cloud nacos_SpringCloud Alibaba系列之Nacos配置中心玩法
  9. csgo服务器linux云崖居,CSGO修改地图天气背景指令
  10. csol永恒python怎么升级_python|怎么升级python的pip