位置: 编程技术 - 正文

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

  • 什么是办税员编号
  • 费用计入什么会计科目
  • 进项税额结转不结转
  • 城建税和教育附加税
  • 自然人转让股权给自己的公司
  • 房地产企业土地增值税清算
  • 平价转让股权个税申报表填写
  • 多交的应交税费怎么算
  • 经营利润所得税费用的计算公式
  • 如果公司没有报税
  • 个人所得税企事业单位承包经营所得
  • 开票税率选错申报增值税时怎么处理
  • 小规模纳税人和小微企业区别
  • 注册资本使用后账务如何处理
  • 股份利润怎么分
  • 股东私人垫支公司支付零星材料的会计分录
  • 技术服务费成本票是什么
  • 金融机构在境外
  • 补缴社保滞纳金怎么做账
  • 发票金额与实际付款金额不一致
  • 如何正确安装锯条
  • bios设置网卡开启
  • 笔记本怎么按出键盘
  • 结转材料采购成本的会计分录是什么
  • windows10如何清理磁盘碎片
  • 无法设置系统更新的原因
  • 返利怎么走账
  • 城镇土地使用税的计算公式
  • 时间序列转换
  • 先开票后发货合法吗
  • 外账和内账哪个比较有发展
  • 销售返利的会计处理方法
  • 企业所得税第二十七条规定
  • 开发阶段发生的费用计入什么科目
  • 基础的数据类型
  • MySQL中distinct与group by之间的性能进行比较
  • 查询不到shsh怎么回事
  • 公司帐户转到法人帐户用途写备用金行吗
  • 预提费用在资产负债表中如何列示
  • 待报解啥意思
  • 拨缴经费收入
  • 职工薪酬包括哪些应如何计算
  • 增值税专用发票怎么开
  • 有留抵税额的会计处理
  • 借贷必相等的含义
  • 研发费用中专利是什么
  • winds密码忘记了
  • mysql5.7.19 winx64解压缩版安装配置教程
  • mysql字符集设置命令
  • 数据库备份怎么做mysql
  • sedsvc.exe是什么
  • win8网络连接
  • win10系统怎么看驱动
  • 在mac外置硬盘上安装软件
  • 开机时显示
  • bboy.exe进程是病毒吗 bboy进程安全吗
  • centos cpu 内存
  • rsync -i
  • 黑马一键重装
  • linux系统问题汇总
  • node.js项目结构
  • 在布局中使用选定的比例
  • linux rsync同步命令(值得收藏)
  • 什么是Shell,shell作用
  • Unity3D游戏开发毕业论文
  • 详细介绍8款超跑车
  • windbg调试驱动
  • shell 数组操作
  • python中字典的键值对
  • unity3d导出fbx文件
  • 用js改变css样式
  • js的异步解决方案有哪些
  • javascript基本语法
  • 安卓小项目实战软件
  • js动态添加trtd
  • 湖北省国税务局钟敏副局长
  • 小微企业企业所得税是多少?
  • 税务局追缴社保流程及办理期限
  • 企业的捐赠支出在哪里能看到
  • 异辛烷征收消费税2023
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设