位置: 编程技术 - 正文

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

  • 金蝶软件可以实现一键报税吗
  • 一般纳税人增值税优惠政策2023
  • 企业可以找审计人员吗
  • 采用直接转销法会在一定程度上高估了应收款项
  • 外购商品赠送怎么做账
  • 技术服务费属于哪个商品编码
  • 税款状态已缴款未入库
  • 增值税发票选择确认平台勾选注意事项
  • 申报表季初资产和季末资产
  • 代扣代缴个税返点怎么申请
  • 非货币性资产交换准则
  • 过路费报销单怎么填写图片
  • 已计提的固定资产减值准备累计金额
  • 已经发生的费用
  • 海关完税凭证如何抵扣进项税
  • 企业所得税年报补报
  • 工会经费支出无效怎么办
  • 公司的样品一般怎么处理
  • 将承兑汇票背书怎么操作
  • 固定资产交换的账务处理
  • 管理费用的明细科目怎么写
  • 营改增后如何纳税
  • 分公司税率怎样确定
  • 跨年度的费用发票怎么做账
  • 法人实名认证后为什么查不到名下公司
  • 管理费是否需合计
  • 新版edge浏览器如何打开ie浏览器
  • 住房公积金余额有利息吗
  • php字符串型数据的定义方式
  • php教程100
  • 车辆开具发票后会计分录?
  • Escarpment Trail in Porcupine Mountains Wilderness State Park, Michigan (© Pat & Chuck Blackley/Alamy)
  • js正则表达式删除特定字符
  • Web前端开发用什么软件
  • 加计抵减是适用什么税率
  • 网页视频不显示画面
  • chat功能
  • yolo v5 可视网络结构
  • 数据挖掘快速入门
  • 汇算清缴补交所得税怎么做凭证
  • get命令获取文件夹
  • python怎么做gui
  • 小规模纳税人财务报表是按季还是按月申报
  • 所得税季度申报表怎么填
  • 商业承兑汇票贴现率
  • 个体户个税计算公式
  • 资产负债表中其他应收款的计算公式
  • 增值税发票系统客服电话
  • 账务处理程序的定义
  • 哪些票据属于会计票据
  • 高速公路过路费怎么算的
  • 车间管理人员的福利费计入什么科目
  • 补提去年累计折旧
  • 销售退货的会计账怎么处理
  • 折扣方式销售如何确定销售额?
  • 飞机票没有发票只有行程单
  • 公交充值卡发票能报销吗
  • 新成立的公司哪个地方能查到
  • sql如何学
  • mysql登陆error2002
  • xp系统开机后不停重启
  • 系统升级为中狼
  • macbook怎么剪视频软件
  • hppusg.exe
  • 安装软件时提示无法访问网络位置
  • win7开机提示音在哪里关闭
  • win70x80073712解决方法
  • win7系统开机黑屏自检
  • win7旗舰版64位系统开机时软件设置自动启动详细图文教程
  • linux配置静态
  • Node.js中的事件循环是什么
  • linux进程切换 宋宝华
  • 使用nodejs实现简单的局域网聊天功能
  • 跑马灯 css
  • android studio项目无法运行
  • python 在线运行环境
  • 人力资源差额发票
  • 丹麦个人所得税税率表
  • 辽宁国家税务局公务员职位2023
  • 耗电异常优化是什么意思微信
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设