位置: 编程技术 - 正文

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

  • 劳务清包违法吗?
  • 残保金季报要填上年职工人数
  • 企业卖车需要交印花税吗
  • 工业企业开票税率
  • 费用发票能不能直接挂应付账款里
  • 专票如何开具
  • 住宿费电子发票样式
  • 交通费补贴报销的会计分录怎么做?
  • 上年留抵税,次年抵扣分录
  • 由收款人签发,经付款人承兑
  • 为安装设备所发生的差旅费入什么科目
  • 进口增值税关税怎么付
  • 增值税视同销售包括哪些情况?
  • 发票添加商品编码怎么填
  • 员工私人车通行费能抵进项税吗
  • 小规模附加税怎么计提分录
  • 我公司去年职工工资多少
  • 企业所得税汇算清缴
  • 关于防暑降温福利国家有哪些政策规定?
  • 跨地区经营汇总纳税企业所得税
  • 买卖房子归谁管
  • 个人营业执照如何办理社保
  • 国外发票可以报销吗
  • 与建筑物有关的设计
  • 技术入股分红怎么计算
  • win10系统关机后自动开机怎么办
  • 如何显示或隐藏编辑标记
  • php版本常用的排版软件
  • 理财计算收益公式
  • php基础入门教程
  • 不动产出租管理办法
  • vue 网页
  • 建筑工程开税票比例占到合同金额的多少
  • php 字节
  • 迁徙的季节主要从哪几个方面写秋天的景物
  • 浅谈php中变量的使用情况
  • 浅谈php中的错误处理方法
  • 深度学习模型部署综述(ONNX/NCNN/OpenVINO/TensorRT)
  • 高通芯片开发
  • nodejs c扩展
  • 长期借款科目的借方反映的内容
  • 投资收益如何记账
  • vant的Uploader 文件上传,图片数据回显问题
  • 汇算清缴涉及哪些调整
  • 汇率差的差额计算方式
  • 进项税需要转出的分录
  • 收到的存款利息
  • 公司账户转到公司账户要多久
  • 借款利息税前扣除应当注意的三个问题
  • 工会经费计提基数包括福利费吗
  • 纯外贸企业进项税怎么抵扣
  • 赠送礼品怎么入账
  • 公司日常费用支出表怎么做
  • 发票只能用一次吗
  • 软件折旧从什么时候算
  • 发票拒收证明盖公章还是财务章
  • sql server常用
  • win7如何创建文件夹
  • ubuntu里怎么装软件
  • 登录系统错误
  • win10系统预览版
  • centos ssh升级
  • vi 技巧
  • linux重启命令网卡
  • Android shape画圆
  • unity3d基础操作
  • js实现二叉查找树
  • 基于jQuery实现Tabs选项卡自定义插件
  • shell脚本实现自动化巡检报警发送邮箱
  • javascript实现3D切换焦点图
  • Python连接MySQL并使用fetchall()方法过滤特殊字符
  • 广州税务局怎么开发票
  • 湖北税务局2021新通知
  • 领导班子和领导干部年度考核
  • 先征后返的增值税计入哪个科目
  • 企业跨区域迁移
  • 银行理财收入如何记账
  • 增值税专用发票和普通发票的区别
  • 常州金坛最新新闻
  • 如何进行税务筹划的方法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设