位置: 编程技术 - 正文

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替换指定内容
  • php5.4+mysql
  • 苹果15手机价格和图片颜色
  • 已抵扣发票开了红字发票怎么做分录?
  • 转让股权企业所得税怎么计算
  • 员工重复报销后如何处理
  • 金融企业营业税税率是多少
  • 贷款和应收款项应采用实际利率法,按摊余成本计量
  • php获取数组的值
  • 预算会计与财务会计适度分离
  • 基于深度学习的自动调制识别(含代码链接)
  • IntersectionObserver 翻译
  • 事业单位结余资金管理办法
  • 小餐饮需要交什么税
  • 培训机构账务处理
  • 租赁业务成本
  • okhttp3源码
  • 总承包可以转包吗
  • 应付职工薪酬账户的明细账户有
  • 小规模纳税人可以抵扣进项税吗
  • 投资管理公司成立的请示范文
  • 企业所得税A类年报怎么申报
  • 失控发票补缴税款后又被稽查
  • 废品收入该如何开票
  • 以汽车投资作为投资项目
  • 简易办法征收增值税有几种情况
  • 残疾人就业保障金怎么申报
  • 单位临时账户可以取现吗
  • 建筑业人工费怎么做账
  • 航天金税税控盘服务电话
  • 暂领款是什么意思
  • 待摊费用是什么意思
  • sqlserver 类型
  • 系统备份恢复系统
  • win10系统回收站在哪
  • win10edge浏览器如何切换到ie
  • webtrapnt.exe - webtrapnt进程是什么意思
  • win8.1玩英雄联盟
  • windows1021h2镜像下载
  • centos7安全
  • 防止暴力破解的方法
  • perl中的$1
  • perl的正则表达式语法
  • vscode 远程调试jni
  • python 技巧总结
  • nodejs child_process
  • 用js做表单验证
  • javascript中Date format(js日期格式化)方法小结
  • recyclerview stableid
  • Windows下Eclipse+PyDev配置Python+PyQt4开发环境
  • 个人工资扣税标准计算
  • 预缴的增值税怎么做账务处理
  • 广西个人医保缴费时间
  • 保险行业税务处理
  • 高新区地税办税服务厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设