位置: 编程技术 - 正文

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

  • 个人所得税退税操作流程
  • 关税纳税申报时间
  • 增值税专用发票抵扣期限
  • 公司零星支出没有发票收据怎么开
  • 小规模纳税人哪些发票可以抵税
  • 增值税起征点的规定只适用于
  • 借贷必相等为什么是错的
  • 租入固定资产改扩建
  • 外贸企业视同内销进项可以抵扣吗
  • 哪些科目需要计提资产减值损失
  • 预付账款改为什么科目
  • 已认证的进项税额转出如何操作
  • 企业用现金支付业务招待费1000元
  • 建安企业预缴个税怎么算
  • 个体工商户库存商品入账
  • 如何区分劳务报酬
  • 土地使用税的计算公式举例子
  • 技术开发费税率13还是60
  • 职工福利费扣除标准2022
  • 房地产公司需要和哪些部门打交道
  • 去办税大厅清卡需要带什么
  • 2019年一般纳税人附加税减免政策
  • 企业奠基费用如何入账
  • 什么时候可以购买火车票
  • 关闭445端口方法命令
  • skynetave.exe - skynetave是什么进程 有什么用
  • 实收资本可以大于注册资本嘛
  • msxct.exe - msxct是什么进程 有什么用
  • 小规模纳税人开票限额是多少
  • 财务收支审批制度主要包括
  • 合伙企业分配股票给合伙人
  • vue ts
  • php异步处理方案
  • springboot基本结构
  • web前端期末大作业旅游页面
  • 用ipconfig/all命令不能显示
  • 房地产代理公司资质证书
  • 预提费用多提汇算清缴怎么做账
  • python中 =是什么意思
  • 增值税专用发票和普通发票的区别
  • css边框实现效果图及代码
  • 帝国cms首页怎么打开
  • mongodb修改命令
  • 汽车保险费计入应付账款还是其他应付款
  • 医用增值税发票
  • 非货币性职工薪酬
  • 打印银行电子回单有断号
  • 税收滞纳金能不能超过税款
  • 口罩属于哪个科目 会计
  • 政府资助专项资金是什么
  • 收到科技局补贴金费怎么入账
  • 可供分配利润包括提取的盈余公积吗
  • 固定资产抵账的账务处理
  • 小规模纳税人减按1%账务处理
  • 支付贷款利息的现金流量怎么指定?
  • 不提供银行流水的理由
  • 普通发票作废要去税局吗
  • 汽车销售企业的资产有哪些
  • 新会计准则待摊费用还有吗
  • 什么叫商业会计
  • mysql存储引擎的作用
  • sql中case when的用法
  • win10禁用windows键
  • win8系统怎样
  • centos安装编译环境
  • win7系统如何卸载流氓软件
  • win7系统打开文件会闪退
  • win10锁屏界面的搜索怎么关
  • 电脑双系统删除一个系统的步骤
  • Android Broadcast
  • 跨域资源共享漏洞怎么修复
  • js frameset
  • nodejs网站开发
  • 编写批处理运行程序
  • Python中str is not callable问题详解及解决办法
  • js折叠展开特效
  • 七牛云和ucloud
  • javascript函数的定义
  • jquery mobile怎么样
  • 江苏省镇江市街道名称
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设