python利用高阶函数实现剪枝函数
作者:北门吹雪 发布时间:2022-04-17 11:21:44
标签:python,高阶函数,剪枝函数
本文为大家分享了python利用高阶函数实现剪枝函数的具体代码,供大家参考,具体内容如下
案例:
某些时候,我们想要为多个函数,添加某种功能,比如计时统计,记录日志,缓存运算结果等等
需求:
在每个函数中不需要添加完全相同的代码
如何解决?
把相同的代码抽调出来,定义成装饰器
求斐波那契数列(黄金分割数列),从数列的第3项开始,每一项都等于前两项之和
求一个共有10个台阶的楼梯,从下走到上面,一次只能迈出1~3个台阶,并且不能后退,有多少中方法?
上台阶问题逻辑整理:
每次迈出都是 1~3 个台阶,剩下就是 7~9 个台阶
如果迈出1个台阶,需要求出后面9个台阶的走法
如果迈出2个台阶,需要求出后面8个台阶的走法
如果迈出3个台阶,需要求出后面7个台阶的走法
此3种方式走法,通过递归方式实现,递归像树,每次递归都生成子节点函数
以上两个问题通过递归来解决,就会出现一个问题,出现重复求解问题,把重复求解的过程剔除掉,在c++语言中称为剪枝函数
#!/usr/bin/python3
def jian_zhi(func):
# 中间字典,判断已经是否求解过
median = {}
def wrap(*args):
# 假如不在中间字典中,说明没有求解过,添加到字典中去,在的话,直接返回
if args not in median:
median[args] = func(*args)
return median[args]
return wrap
@jian_zhi
def fibonacci(n):
if n <= 1:
return 1
return fibonacci(n-1) + fibonacci(n-2)
@jian_zhi
def climb(n, steps):
count = 0
# 当最后台阶为0的时候,说明最后只是走了一次
if n == 0:
count = 1
# 当最后台阶不为0的时候,说明还需要走至少一次
elif n > 0:
# 对三种情况进行分别处理momo
for step in steps:
count += climb(n-step, steps)
# 返回每次递归的计数
return count
if __name__ == '__main__':
print(climb(10, (1, 2, 3)))
print(fibonacci(20))
所谓的剪枝函数不过是保证每次递归的函数唯一性,利用中间字典保存已经执行过得函数和参数,通过判断参数,剔除重复的函数调用
来源:http://www.cnblogs.com/2bjiujiu/p/7291032.html


猜你喜欢
- 将dataframe中的NaN替换成希望的值import pandas as pddf1 = pd.DataFrame([{'col
- 一简介本软件作用于人员管理,1创建一个岗位管理界面,点击岗位管理之后,设置好岗位名称,拖动鼠标画框,完成岗位创建,之后里面可以放置人员。可以
- 作为一门脚本语言,写脚本时执行系统命令可以说很常见了,python提供了相关的模块和方法。os模块提供了访问操作系统服务的功能,由于涉及到操
- 函数如下: function update_timelist(&$arr,$timestamp,$threshold){ $time
- 案例描述在定时脚本运行过程中,发现当备份表格的sql语句与删除该表部分数据的sql语句同时运行时,mysql会检测出死锁,并打印出日志。两
- 问题一:会报错的写法: GRANT ALL PRIVILEGES ON *.* ‘root'@'%
- 最小编辑距离或莱文斯坦距离(Levenshtein),指由字符串A转化为字符串B的最小编辑次数。允许的编辑操作有:删除,插入,替换。具体内容
- 在mysql的启动过程中有时会遇到下述错误Can't connect to local MySQL server through s
- http 模块简介Python3 中的 http 包中含有几个用来开发 HTTP 协议的模块。http.client 是一个底层的 HTTP
- 一、Python字符编码介绍1、须知:在python 2中默认编码是 ASCII,而在python 3中默认编码是 unicodeunico
- 原始数据的DF:此时,我要选择列名isInfected为“手足口病”的样本行:总结:选择DataFrame里面某一列等于某个值的所有行,用一
- 举个例子来说,要查找出2007-10-12至2007-10-31之间在网站上注册的会员,选择好日期后,点击“查询”按钮,发现2007-10-
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- 目录应用场景福音快快使用模型类效果注意事项今天介绍一个后台开发神器,很适合当我们数据库中已存在了这些表,然后你想得到它们的model类使用O
- 本文实例讲述了JS实现利用两个队列表示一个栈的方法。分享给大家供大家参考,具体如下:先看原理图:理清楚思路,再动笔写:<!DOCTYP
- bitbucket 搭建搭建过程如下所示:1 jdk 8如果有的话就不用安装了,此处采用rpm方式安装(不用配置环境变量)把下载好的文件放在
- 今天看了篇关于Web Form Design的成功案例,虽然讲的事情很简单,但总结了一些方法,翻译过来做个原始积累吧,以后写东西举例子时也好
- MySQL查询交集、并集、差集背景和使用的数据样本该章节学些主要涉及到Datawhale SQL 组队学习任务;本次使用的数据,由Dataw
- 笔者在今天的工作中,遇到了一个需求,那就是如何将Python字符串生成PDF。比如,需要把Python字符串‘这是测试文件'生成为P
- 先看一下总体效果:上传文件做了大小和类型的限制,在动图中无法展现出来。使用file类型的input实现选择本地文件但是浏览器原生的文件上传按