位置: 编程技术 - 正文

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

  • 买房缴纳契税需要交税吗
  • 超过小规模纳税人
  • 什么是税收滞纳金请举例说明
  • 增值税一般纳税人和小规模纳税人的区别
  • 工资社保缴纳计算器
  • 收到上月保险赔偿款分录
  • 应计入资产负债表应付利息项目的有
  • 小规模纳税人销售额
  • 大家怎么看恒大品牌
  • 补开发票怎么做分录?
  • 本月采购下月付款怎么记账
  • 银行客户专用回单分录
  • 个人独资企业可以不开公户吗
  • 政府奖励金额是否要交二次税呢
  • 税务没有核定印花税
  • 小规模自开专票税率是1%还是3%
  • 两年利润都为负数,如何计算完成率
  • 增值税普通发票有什么用
  • 其他有形动产租赁服务
  • 个人财产转让所得在哪里申报
  • 盘库存在的问题汇总
  • 印花税本月计提本月缴纳
  • 经费支出渠道
  • 政策性专项资金包括哪些
  • php-cgi
  • 劳动合同到期补偿金怎么算
  • 照片文件夹如何压缩
  • Http请求-hutool工具类的使用
  • 预计负债的概念是什么
  • 供货商倒闭未缴增值税
  • 制造企业的印花税税率
  • 穹顶高度
  • php加密方式有哪些
  • 用php生成一个txt文件
  • 前端调用后端代码
  • framework怎么查看
  • 字节在互联网什么地位
  • 《走进新时代》专栏
  • 营业外收入的会计科目编码
  • 增值税申报流程大全(附图文详解)
  • 单位有残疾人能享受
  • 一般纳税人普通发票做账
  • 发票项目要求
  • 待处理财产损溢借方是增还是减
  • db2之间的数据库迁移
  • SQL Server 2016 TempDb里的显著提升
  • 印花税如何记账入账
  • 销售车位应怎么交税
  • mysql8.0存储过程
  • 一般纳税人可以给小规模开专票吗
  • 稳岗补贴算不算财政补贴
  • 一般纳税人企业所得税怎么征收
  • 其他应付款的辅助科目是什么
  • 用友t6操作流程
  • 贷款损失准备的会计核算
  • 先开票后出库会计处理
  • 销售返利如何做会计分录
  • 企业变更地址需要几天
  • 月末本年利润借方余额表示什么
  • 政府代建工程
  • 余利宝本金会亏吗
  • 收到对方的银行承兑汇票
  • 收到工程款怎么入账
  • 胶水属于什么开发工具
  • 免征的附加税怎么做账
  • xp系统怎么删除系统
  • linux下使用lftp的小结(远程服务器备份)
  • win10官方要钱吗
  • win7系统360浏览器崩溃
  • 批处理程序教程
  • linux查看so中的函数
  • socketio视频教程
  • 短信发送器
  • js中的tostring方法
  • jquery中keyup
  • 利用python进行
  • 简约时尚搭配
  • 如何查询车辆购置税
  • 登录""增值税发票选择确认平台""时提示""打开设备
  • 贵阳北控水务电话客服电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设