使用装饰器的场景

当我们想对多个函数增加一个相同的功能时,例如计数统计,缓存计算结果,记录日志等


# 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)

  

最新文章

  1. Objective-C 外观模式--简单介绍和使用
  2. asp.net Gridview 的用法
  3. python数字图像处理(1):环境安装与配置
  4. HealthKit开发教程之HealthKit的主要类型数据
  5. 【原创】OPA857 TEST模式使用
  6. webService—使用javaxws发布自己的webService
  7. iOS:弹出窗控制器:UIPopoverController
  8. 嵌入式 arm平台ping域名指定ip小结
  9. ubuntu下eclipse打开win下的代码中文出现乱码
  10. 构建高性能web站点笔记一
  11. Delphi - 闲来无事,自己写个Timer玩玩(多线程Timer)
  12. Android全局异常捕捉
  13. hive自定义UDF
  14. 从Proxy.newInstance出发
  15. select选中获取索引三种写法
  16. 使用iconfont图标
  17. openstack Q版部署-----安装报错问题
  18. 日志组件slf4j介绍及配置详解
  19. 第六章:四大组件之Activity
  20. 【代码审计】YUNUCMS_v1.0.6 后台代码执行漏洞分析

热门文章

  1. JS基础_自增和自减
  2. 正确使用Java读写锁
  3. printf的使用和test的使用
  4. 【概率论】6-4:分布连续性修正(The Correction for Continuity)
  5. 如何手动安装WordPress主题和插件(Linux)
  6. Echarts:实现拖拽效果
  7. python 通过下载包setup.py安装模块
  8. TLS整理(下):TLS如何保证安全
  9. SSH项目中使用struts-tags报错According to TLD or attribute directive in tag file, attribute test does not accept any expressions
  10. win10: windows+E 改回打开我的电脑