动态规划:斐波那契数列里面的东西?
斐波那契数列
我想每个人都会写斐波那契数列吧!!
斐波那契数列的定义
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]
动态规划:斐波那契数列里面的东西?相关推荐
- Python 实现 动态规划 /斐波那契数列
1.斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为&quo ...
- 动态规划——斐波那契数列(70. 爬楼梯、198. 打家劫舍、213. 打家劫舍II、信件错排、母牛生产)
递归和动态规划都是将原问题拆分成多个子问题然后求解,但是动态规划存储了子问题的解,不需要重复计算. 动态规划(Dynamic Programming,DP)需要转移方程和边界条件. 目录 一.70. ...
- 超级台阶 动态规划+斐波那契数列+打表(水题)
描述 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法? 注:规定从一级到一级有0种走法. 输入 输入数据首先包含一个整数n(1<=n<=100), ...
- python侯先生爬楼梯_经典算法题:爬楼梯 ,以斐波那契数列来解题代码案例
网上这题的解题思路主要有两种:动态规划 斐波那契数列 因为我们用斐波那契数列来解,所以我主要描述方法2. 斐波那契数列 又称 兔子数列, 指得是:1.1.2.3.5.8.13.21.--, 在数学上它 ...
- 斐波那契数列升级版(洛谷P2626题题解,C++语言描述)
题目要求 题目链接 分析 首先是求斐波那契数列,这东西我就不说了,能看到这篇题解的你肯定会. 为什么要用数组呢?为了记忆化,防止重复算. 当然,由于本题是单查询,所以不必记忆化,但记忆化对多查询真的会 ...
- 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)+ ...
- 斐波那契数列的实现(简单递归和动态规划)
斐波那契数列的实现(简单递归和动态规划) 一.简单递归的实现 1 #include "stdafx.h" 2 #include <string> 3 using nam ...
- 动态规划实现斐波那契数列求解
int fibonacciDP1(int n) { // 动态规划不使用数组int a = 0;int b = 1;int sum;int i;if (n == 0)return 0;if (n == ...
- 八十八、从斐波那契数列和零一背包问题探究动态规划
@Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 本人看了vivo,阿里巴巴的校招算法题,可以明确知道绝对有动态规划. ...
最新文章
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因...
- 【LINUX 学习】Ext3 的三种日志记录方式
- markdown to html
- Call to undefined function Workerman\posix_getpid
- H264码流结构分析
- 【深度学习】Transformer 向轻量型迈进!微软与中科院提出两路并行的 Mobile-Former...
- 基于Kebernetes 构建.NET Core技术中台
- 超极本认知六大误区详解:不只是轻薄+长续航
- 多个异步之间的协作方案
- HBase之四--(1):Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询...
- python语言是一个优秀的面向对象语言_python是面向对象的语言吗
- python单例模式和装饰器
- centos7安装google浏览器
- java digester_digester解析xml文件
- 明源云与华为联合发起828 B2B企业节,共同成就好生意!
- OCL功率放大电路分析笔记
- php 红包过期退回,RabbitMQ功能实现1- 红包未领取退回
- 买了智能电视之后还需要购买搭配机顶盒吗?
- 银行账户存储系统C++
- 术业有专攻,数据库的 dba
热门文章
- adaboost mh matlab,Adaboost算法的前世今生
- mysql centos 源码安装_centos7源码安装mysql8
- php5.5 sqlserver 2012,PHP连接SQLSERVER2012
- rds基于什么开发_元王RDS--让H公司的10多年的设计经验重获新生!
- 黑苹果挂载不了分区_让黑苹果变得更完美——BCM94532HMB无线蓝牙接力完美驱动!...
- c语言程序设计运用,清华大学出版社-图书详情-《C语言程序设计及应用教程》...
- linux 查看系统函数库,教你在Linux操作系统中如何创建函数库
- spring cloud nacos_SpringCloud Alibaba系列之Nacos配置中心玩法
- csgo服务器linux云崖居,CSGO修改地图天气背景指令
- csol永恒python怎么升级_python|怎么升级python的pip