位置: 编程技术 - 正文

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

  • 企业所得税纳税人
  • 不征税收入确认递延收益如何填报
  • 工会经费每月必须60块钱
  • 增值税纳税申报表模板
  • 固定资产开专票怎么记凭证
  • 实验室报销发票
  • 全年一次性奖金单独计税怎么算
  • 房产税原值是否包括土地
  • 持有待售固定资产为什么不计提折旧
  • 超市销售购物卡怎么开票
  • 红字发票是否需要写进出仓单里
  • 主营业务收入冲销
  • 会计人士教你在Excel中如何计算年均增长率
  • 员工借款后离职怎么办
  • 企业生产成本核算的一般程序为
  • 普通年金的定义
  • 定额发票用来干嘛
  • 营业执照印花税减免政策
  • 税务是如何处理违章的
  • 可以给农村信用社的存折转账吗
  • 变更办税人信息在哪变更
  • 加计扣除申报表填报说明
  • 酒店的床和沙发哪个好
  • 企业为职工负担的个人所得税是什么意思
  • 持续经营净利润是什么意思
  • 扣收贷款本息
  • 增值税普通发票有什么用
  • 产品核算会计业务流程
  • 苹果电脑重新安装系统磁盘锁了怎么办
  • 电商运费怎么做账
  • php检测文件是否存在
  • 网页提示摄像头未授权
  • PQV2ISECURITY.EXE - PQV2ISECURITY是什么进程 有什么用
  • php静态函数
  • 维多利亚瀑布有多高?多宽?
  • 其他综合收益明细科目
  • vue封装组建
  • thinkphp6多语言
  • 未分配利润在科目余额表里怎么看
  • 成本费用票包括哪些
  • 未认证的进项税发票入账
  • 浏览器打开域名怎么设置
  • mongodb从入门到商业实战
  • 企业合并财务报表论文
  • 个体工商户季开票30万是否缴纳个人所得税
  • sql server 2008数据库没有备份文件恢复
  • 保险公司作为奖金怎么算
  • 个体户一年能开多少票不用交税
  • 广告制作费怎么入账
  • 交易性金融资产公允价值变动怎么算
  • 企业哪些账户可以取现金
  • 职工报销的医药费是什么
  • 工资的内容包括很多项
  • 利息收入是一级科目还是
  • 受托代销的含义
  • 商业会计主要做什么
  • 公司按最低标准交社保可以申请补偿吗
  • 非货币性资产交换和债务重组的区别
  • 固定资产开普票还是专票
  • 单位组织活动主持词
  • 未达起征点可以申请一次性创业补贴吗
  • 在建工程进项税额抵扣规定
  • 融资租赁的固定资产视为企业自有固定资产管理
  • 公益捐赠仪式流程
  • MAC OS X Yosemite开启深色模式的方法
  • xp系统咋样
  • service5.exe - service5是什么进程 有什么用
  • win7用户在哪
  • Win10预览版更新弹窗如何关闭
  • cocos2dx schedule
  • cocos2d
  • 一键修复ie
  • javascript+css3开发打气球小游戏完整代码
  • js插件写法
  • jQuery仿写百度百科的目录树
  • python编写一个函数求斐波那契
  • 资本公积如何转增股本的流程
  • 如何开具分包发票流程
  • 陕西税务局如何缴纳社保
  • 转让定价调查与调整实务问答
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设