斐波那契数列&&上台阶
使用装饰器的场景
当我们想对多个函数增加一个相同的功能时,例如计数统计,缓存计算结果,记录日志等
# coding:utf-8
# 【题目1】
# 斐波那契数列 又称黄金分割数列,指的是这样的一个数列 1,1,2,3,5,8,13,21,,,
# 这个数列从第三项开始,每一项都等于签名的2项和,求数列的第n项 def memo(func):
cashe={}
def wrap(*args):
if args not in cashe:
cashe[args]=func(*args)
return cashe[args]
return wrap @memo
def fi(n):
if n<=1:
return 1
return fi(n-1) + fi(n-2) # print fi(5)
# 【题目2】
# 一个共有10个台阶的楼梯,从下面走到上面,一次只能迈1-3个台阶,并且不能后退,走完所有的台阶共有多少种方法
当有n个台阶时,在上n台阶之前一步,如果是一次上三个台阶 就有f(n-3)中方法 如果一次上2个台阶就有f(n-2)中方法,如果一次上1个台阶剩下的就有f(n-1)种方法
n=1时 c=1
n=2 c=2
n=3 c=4
n=4
(1)第一步迈1个台阶 剩下3步 f(n-1)=f(3)=4
(2)第一步迈2个台阶 剩下2步 f(n-2)=f(2)=2
(3)第一步迈3个台阶 剩下1步 f(n-3)=f(1)=1
c=f(n-3)+f(n-2)+f(n-1)
......
@memo
def climb(n,steps):
count=0
if n==0:
count=1
elif n>0:
for step in steps:
count+=climb(n-step,steps)
return count
@memo
def climb2(n):
count=0
if n<=1:
count=1
elif n==2:
count=2
elif n>2:
count=climb2(n-1)+climb2(n-2)+climb2(n-3)
return count
print climb(10,(1,2,3))
print climb2(10)
斐波那契数列&&上台阶的更多相关文章
- 【剑指offer】9、斐波拉契数列
面试题9.斐波拉契数列 题目: 输入整数n,求斐波拉契数列第n个数. 思路: 一.递归式算法: 利用f(n) = f(n-1) + f(n-2)的特性来进行递归,代码如下: 代码: long long ...
- C#求斐波那契数列第30项的值(递归和非递归)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
- js中的斐波那契数列法
//斐波那契数列:1,2,3,5,8,13…… //从第3个起的第n个等于前两个之和 //解法1: var n1 = 1,n2 = 2; for(var i=3;i<101;i++){ var ...
- 剑指Offer面试题:8.斐波那契数列
一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
- 算法: 斐波那契数列C/C++实现
斐波那契数列: 1,1,2,3,5,8,13,21,34,.... //求斐波那契数列第n项的值 //1,1,2,3,5,8,13,21,34... //1.递归: //缺点:当n过大时,递归 ...
- 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]
P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...
- Python递归及斐波那契数列
递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可 ...
- 简单Java算法程序实现!斐波那契数列函数~
java编程基础--斐波那契数列 问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路:可能出现的情况:(1) n=1 ,一种方法 ;(2)n=2 ...
随机推荐
- bzoj 3829: [Poi2014]FarmCraft 树形dp+贪心
题意: $mhy$ 住在一棵有 $n$ 个点的树的 $1$ 号结点上,每个结点上都有一个妹子. $mhy$ 从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装 $zhx$ 牌杀毒 ...
- learning java 获取环境变量及系统属性
通过System.getenv( ) 获取环境变量 通过System.getProperties() 获取系统属情 通过System.currentTimeMillis() System.nanoT ...
- 结构化异常SEH处理机制详细介绍(二)
本文将全面阐述__try,__except,__finally,__leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型.SEH实际包含两个主要功能:结束处理(termin ...
- 通过django-crontab扩展来实现 定时任务
pip install django-crontab 基本格式 : * * * * * 分 时 日 月 周 命令 M: 分钟(0-59).每分钟用*或者 */1表示 H:小时(0-23).(0表示0点 ...
- 「LibreOJ NOI Round #2」单枪匹马
嘟嘟嘟 这题没卡带一个\(log\)的,那么就很水了. 然后我因为好长时间没写矩阵优化dp,就只敲了一个暴力分--看来复习还是很关键的啊. 这个函数显然是从后往前递推的,那么令第\(i\)位的分子分母 ...
- npm start的时候改变端口及组合脚本
windows npm修改端口启动 set PORT=3000&&roadhog server npm start Linux npm 修改端口启动 set PORT=3000 roa ...
- esp8266 + dht11 + 两路继电器 实现pc远程控制开关机温度监控.并配置zabbix监控
事因:翻了翻自己之前的硬件小箱子,几年前买的一些小东西,想用用起来. 正好我有些数据放在机器上,有时候需要机器启动,我使用完成后在断开. 其实网络唤醒也能做到,但是机器一直给电也不好,在说家里有小孩A ...
- mac Understand 安装破解
下载:链接:https://pan.baidu.com/s/1UvxgFnjv9pRVJmZO-J2OrQ 密码:nyd4 启动后,开始激活,点击enter License code 点击“use ...
- Fluent 批量添加线面、点面、平面的scheme实现 【转载】
转载自http://chan1629.blog.163.com/blog/static/19595703220137219166686 新建一个filename.scm,文件,用记事本打开. 在文件中 ...
- 从库延迟增大,MySQL日志出现InnoDB: page_cleaner: 1000ms intended loop took 17915ms.
今天同事负责的数据库从库出现从库延迟增大,MySQL日志InnoDB: page_cleaner: 1000ms intended loop took 17915ms. 了解原因,keepalived ...