位置: 编程技术 - 正文

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

  • 土地税税额标准
  • 纯外贸企业出口到运费可以抵扣吗
  • 计提租赁费用
  • 事业单位无形资产摊销年限
  • 开办期间的利息收入怎么做账
  • 企业所得税资产总额怎么填写
  • 本月缴纳增值税和上个月账本金额不对
  • 增值税转型前后对比
  • 房地产业营改增
  • 股权投资和债权投资的风险
  • 电子设备税费
  • 开具有误拒收的增值税专用发票怎么办?
  • 一台设备分期开票数量
  • 行政事业单位拨入经费
  • 销货清单怎么写才正规
  • 企业增值税留抵退税新闻稿范文
  • 境外公司委托境内公司提供劳务
  • 建安官网
  • 非雇佣劳务
  • 股权转让过程中需要注意哪些问题
  • 本期免税收入是什么
  • 现金折扣发票如何开具
  • 为什么增值税不影响利润
  • 半年报利润分配是否需要审计?
  • 海关增值税发票双抬头
  • 城建税印花税教育附加税各是多少
  • 福利费不属于工资
  • 外汇汇兑损益怎么做账
  • 房地产企业收到房款账务处理
  • 捐赠计提管理费的账务处理?
  • 季度利润
  • 如何做好财务工作发言
  • 工地购买的零星材料计入什么科目
  • 债券投资属于什么业务
  • npm sill idealTree buildDeps 安装踩坑指南(详细版)
  • 每股收益增长率计算公式
  • 预收账款什么时候确认
  • 异地设立的仓库怎么处理
  • 划拨用地无使用权怎么办
  • 企业会计日记账保管期限为()年。A5B10C30D35
  • php使用pdo连接数据库
  • vue mocha
  • ntpdate命令详解
  • 暂估入库以及暂估的区别
  • 零申报一定要有员工吗
  • 税款已缴未入库怎么处理
  • 营改增之前的工程还能开票吗
  • 承兑汇票上能手写名字吗
  • 打开access自动弹出窗体
  • 取得股息红利所得 个人所得税
  • 工会支付职工福利费做账
  • 物流公司交的保证金可以退吗?
  • 无形资产的会计准则的相关规定
  • 作业成本多用于直接成本的核算
  • 购买的办公用品需要入库出库吗
  • 房地产会计核算科目
  • sqlserver判断数据库是否存在
  • win097
  • freebsd常用命令
  • hprof-conv.exe
  • windows8.
  • Win8系统怎么安装
  • [置顶]马粥街残酷史
  • shell脚本监控日志输出
  • ai人工智能python
  • 64位Win7环境下vs2013配置opengl
  • 浅析科学发展观的核心立场
  • python读取数据
  • Android UI之GridLayout(网格布局)
  • shell bash sh
  • shell脚本中获取日期
  • 工具类软件有哪些
  • android:theme="@style/apptheme"
  • jquery给下拉框添加选项
  • jquery找父级
  • js拖拽div
  • 保障性住房是否可以买卖
  • 残疾人就业有哪些选择
  • 河北保定地税局官网
  • 德税手卷烟海淘
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设