位置: 编程技术 - 正文

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

  • 哪些单位属于政府工作部门系列
  • 两个账户往来款怎么做现金流量表
  • 讲师讲课费标准2019
  • 附加税费申报没有怎么填
  • 企业收到的捐赠应计入
  • 计划成本下存货盘盈
  • 自产产品用于业务宣传确认收入吗
  • 个人独资企业变更投资人要交税吗
  • 缓缴税款到期缴纳罚款吗
  • 商铺租赁合同的用途怎么写
  • 应收票据周转率高
  • 土地使用税为什么不计入存货成本
  • 什么费用计入什么科目
  • 公司购车购置税怎么交款
  • 固定资产本期折旧额与上期不一样
  • 已抵扣的发票怎么开红字发票申请单
  • 金税三期个人所得税扣缴系统手机版
  • 异地预缴增值税后本地还要交吗
  • 托儿所幼儿园卫生保健工作规范2022
  • 非货币性资产交换准则
  • 政府会计提取专用基金
  • 购买固定资产的税率是多少
  • 上月暂估本月怎么冲销
  • 自建房屋没有发票如何入账
  • 餐饮店收入是销售收入吗
  • 发票分割单可以抵扣吗
  • 高技术制造企业
  • 电脑开wifi给手机用好吗
  • 财务期初期末
  • 季节性停工是什么
  • 什么是土地使用者依照法律规定
  • 苹果14出来13会下架吗
  • windows10如何清理磁盘碎片
  • 布里斯托尔景点
  • 阿里php面试题
  • 金银首饰零售业税负率是多少
  • php图片库
  • 暂估金额与发票金额会影响什么信息
  • java单点登录token
  • 特征融合add
  • 所得税的期初资产怎么算
  • 在建工程减值准备是否可以转回
  • 个税借方的含义
  • 税票抵扣是多少个点
  • 个税算错怎么办理退税
  • 出租车发票可以改时间吗
  • 租车费开票属于哪个类别
  • 购入商品再卖出
  • 个人所得税的征收
  • 所得税费用需要结转损益吗
  • 小公司没有财务软件怎么手工记账
  • 文化事业建设税怎么申报
  • 工程预付税金如何计算
  • 其他单位无偿过账合法吗
  • 先付款后开发票的会计分录?
  • 内部产生的商誉应确认为无形资产
  • 科目汇总表账务处理程序登记总账的依据是
  • redhat rhca
  • macbookpro怎么提升性能
  • centos安装编译环境
  • 用指定用户名访问网络
  • 打开win七
  • kernel-headers-2.2.1-4
  • [置顶]bilinovel
  • unity3d网络游戏开发
  • eventlistener js
  • java 同步方法和同步代码块区别
  • javascript语言介绍
  • jquery设置图片大小
  • shell脚本定时任务怎么写
  • mac怎么编写python
  • jquery插件是干什么的
  • python字典添加多个键值对
  • 对象类型怎么填
  • javascript调用c语言
  • jquery的选择器有哪几种类型
  • 小规模纳税人购买车辆可以抵扣税吗
  • 税务工作者发展现状
  • 广东省广州市国资委
  • 专用发票章盖在哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设