位置: 编程技术 - 正文

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环境(阿里云服务器使用教程)

  • 小微企业所得税费用怎么算
  • 代扣代缴个人所得税手续费返还 增值税
  • 有形资产租赁服务的税率
  • 劳务发票打款用途写什么
  • 预缴所得税年底怎么结转
  • 承销债券收取的承销费属于什么收入
  • 收入比开票多如何处理好
  • 煤炭企业生产成本包括
  • 服装企业销售方式
  • 计算企业所得税不得扣除的项目
  • 未确认收入可以开发票吗
  • 以前年度不合规发票怎么处理
  • 汽车修理费需要交印花税吗
  • 物流分公司怎么运作
  • 机票报销发票抬头要开公司的吗
  • 预缴时弥补的以前年度亏损是会计亏损吗?
  • 请问高人们旧房子要装修应怎样装
  • 融资性售后回租按什么缴纳增值税
  • 税控机减免会计分录
  • 包装物报废收回残料
  • 生产企业出口退税全部流程
  • 什么企业需要纳税申报
  • 水费能不能开专票
  • 商用房的增值税是多少
  • 存货减值账务处理 华图
  • 穿越火线真人版宣传片
  • 模具成本怎么核算
  • 收到个人款开公司发票
  • 长期股权投资转让需要交什么税
  • php 格式化字符串
  • 快递行业一般纳税人税率是多少
  • 阿里什么
  • axure rp 9视频教程
  • node-js
  • vue数据加载完成显示页面过渡动画
  • 多缴税金抵税会怎么样
  • 购进原材料款项未付应编制什么凭证
  • 什么情况下不用割包皮
  • 会计调整以前年度遗留问题查不出来说明怎么写
  • 我国营改增后,一般纳税人适用的增值税基本税率
  • Ficstar Software � Web Data Extraction Tools
  • 帝国cms如何卸载应用
  • 固定资产清理年末余额怎么处理
  • 自有资金等于货币资金吗
  • db2报42603
  • MySQL Replace INTO的使用
  • sql2012附加数据库方法
  • 上级拨付的债券怎么做账
  • 定额发票已验旧怎么办
  • 一般纳税人登记 核算地址
  • 小规模差额征税的账务处理
  • 进出口货物报关单填制规范
  • 一般纳税人季报还是月报
  • 外经证报验登记流程
  • 融资租赁固定资产折旧年限
  • 收到利息的会计凭证
  • 其他业务收入如何填写增值税申报表
  • 个体工商户个税怎么申报
  • 拆除费计入哪个科目
  • 不能抵扣的进项税怎么做账务处理
  • 赊销是什么意思 视频
  • 备查账包括哪些
  • 仓库记录
  • mysql 5.7.11 winx64安装配置方法图文教程
  • mysql语句的注释符号
  • 清空表内数据语句
  • 关机并重启是怎么回事
  • xp电脑搜索文件为什么搜索不出来
  • 笔记本开机白屏进不了桌面
  • 重装系统后没声音怎么解决win7
  • win7无网激活
  • 微软64位Win10 Mobile很快到来 Surface Phone有望搭载
  • 不易引起无意注意的是
  • js解析机制
  • javascript 触发事件列表 比较不错
  • python发送信息到微信
  • python的params
  • 电信追缴欠费的工作方案有哪些
  • 华为领导班子成员名单
  • 养猪环保局有什么新政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设