位置: 编程技术 - 正文

Python中使用装饰器来优化尾递归的示例

编辑:rootadmin

推荐整理分享Python中使用装饰器来优化尾递归的示例,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

尾递归简介尾递归是函数返回最后一个操作是递归调用,则该函数是尾递归。递归是线性的比如factorial函数每一次调用都会创建一个新的栈(last-in-first-out)通过不断的压栈,来创建递归, 很容易导致栈的溢出。而尾递归则使用当前栈通过数据覆盖来优化递归函数。阶乘函数factorial, 通过把计算值传递的方法完成了尾递归。但是python不支出编译器优化尾递归所以当递归多次的话还是会报错(学习用)。

eg:

尾递归优化这里用到了斐波那契数来作为例子.线性递归的算法由于太过一低效就被我们Pass掉了,我们先来看尾递过方式的调用:

这段程序我们来测试一下,调用 Fib()结果:

如果我们用Fib(),结果,茶几了,如下:

Python中使用装饰器来优化尾递归的示例

好了,现在我们来尾递归优化

我们给刚才的Fib函数增加一个Decorator,如下:

恩,就是这个@tail_call_optimized的装饰器 ,这个装饰器使Python神奇的打破了调用栈的限制。

这下即使我们Fib(),也能在ms跑出结果(ms是以前博文提到那台元的上网本跑出来的结果)

不卖关子了,下面我们来看看这段神奇的代码:

使用的方法前面已经展示了,令我感到大开眼界的是,作者用了抛出异常然后自己捕获的方式来打破调用栈的增长,简直是太匪夷所思了。而且效率问题,和直接尾递归Fib相比大概造成了五倍的时间开销。

最后很不可思议的,尾递归优化的目的达成了。

在阿里云服务器上配置CentOS+Nginx+Python+Flask环境 项目运行环境阿里云(单核CPU,1G内存,Ubuntu.x带宽1Mbps),具体购买和ssh连接阿里云本文不做描述。实用工具首先进入阿里云后先要升级下apt-get,并下载所

python3实现暴力穷举博客园密码 我之前想写路由器的密码暴力破解器,我手上只有极路由,发现极路由有安全限制,只能允许连续密码错误,所以我改拿博客园练手。博客园的博客有

python3 实现的人人影视网站自动签到 这是一个自动化程度较高的程序,运行本程序后会从chrome中读取cookies用于登录人人影视签到,并且会自动添加一个windows任务计划,这个任务计划每天下

标签: Python中使用装饰器来优化尾递归的示例

本文链接地址:https://www.jiuchutong.com/biancheng/387683.html 转载请保留说明!

上一篇:举例讲解Python面向对象编程中类的继承(python面向)

下一篇:在阿里云服务器上配置CentOS+Nginx+Python+Flask环境(阿里云服务器使用教程)

  • 捐赠免税会计分录
  • 什么是减免税额90%
  • 建筑安装增值税税负率行业标准
  • 在项目地预缴税款有哪些税种
  • 存货占营业收入的意义
  • 房地产开发企业预缴增值税
  • 银行理财产品的特点
  • 金税盘抵减增值税的账务处理
  • 第三方用人单位应承担哪些责任
  • 买商铺返租金之套路
  • 制造费用属于成本类还是损益类
  • 工会经费计入应付职工薪酬
  • 出口进项税额转出怎么做账务处理
  • 专票地址错了可以报销吗
  • 2018年房地产行业分析
  • 如何正确理解新制度经济学与新古典经济学的关系
  • 三证合一对纳税有影响吗
  • 统借统还的所得税政策
  • 商品流通企业采购商品的进货费用金额较小的
  • 出租设备计提折旧记什么科目
  • 发票可以开工程款吗
  • 企业怎样信用升级
  • 个人可以做代理吗
  • 向农民购进农产品
  • dns进程
  • 公司收到医疗保障局打入的钱怎么做账
  • 前端字符长度限制
  • 进出口公司出口退税额
  • 广告费发票内容是什么
  • 苍鹭一生可以活多久
  • 让税务局代开的发票直接交纳的税金怎么做会计分录?
  • 业务招待费专票可以抵扣增值税吗
  • thinkphp跨域解决方案
  • vue为什么监听不到对象内部属性
  • 2手房价格
  • flexbuffers
  • 无形资产和固定资产减值准备可以转回吗
  • 电子发票税率怎么改
  • 普通支票和现金支票区别
  • php用户评论
  • 织梦如何添加浮动广告
  • 如何在控制台打印debug里的数据
  • pycharm折叠代码块快捷键
  • 发票已认证未抵扣,开红字发票信息表后,愿票需要退回吗
  • 清算汇缴报表填写范本
  • sql2000数据迁移到2008
  • 确认营业收入的时间是什么简答题
  • 停车费比油费还贵
  • 移动怎么开当月发票
  • 上月未抵扣完的进项税额分录
  • 公司报销专用发票
  • 进项税留底怎么处理
  • 工会账户收到经费的会计科目
  • 装修费应该按几折算
  • 查出以前年度的虚开发票,如何补税
  • 发票怎么打印的出来
  • 缴纳社保记账凭证怎么开
  • 什么服务费发票可以免税的
  • 管理费用通俗理解
  • 如何开展服务
  • 单位车辆保险费
  • casewhen嵌套查询
  • amd furyx
  • 文件夹隐藏属性怎么弄
  • apache是什么文件
  • win7关闭混合睡眠
  • centos哪个版本最好用2022
  • win7网络不能用怎么办
  • win10系统无法运行海岛大亨5
  • android屏幕适配的五种方式
  • easyui的表单验证
  • python如何读取字符串的一个一个字符
  • 手机unity游戏
  • jquery的实现原理
  • 最简单的java设计
  • 福建省税务局 电子
  • 个人所得税房贷能退多少钱
  • 香港pcc价格
  • 欠账6万怎么还
  • 减免税备案登记表样本
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设