位置: 编程技术 - 正文

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年
  • 企业股东分红怎么交税
  • 成本结算怎么处理?
  • 生产成本和营业成本的关系
  • 水电费分析小报
  • 个体户收现金可以开发票吗
  • 融资租出的设备计入什么科目
  • 房地产开发企业预缴增值税
  • 向境外分派红利怎么计算缴纳企业所得税
  • 土地无形资产摊销的会计处理
  • 专用设备抵免企业所得税目录
  • 退回多交的所得税怎么做分录小规模
  • 核定征收印花税的计税依据是否含税
  • 砂石开采销售需什么资质
  • 劳务建筑公司一年可以赚多少
  • 应征增值税不含税销售额(3%征收率)怎么算
  • 上报汇总之后怎么申报
  • 冲减增值税销项税额
  • 酒店产权式经营业主取得的收入按股利红利所得
  • 无形资产管理的基本流程包括无形资产的
  • 高危行业企业要设置什么机构
  • 持续经营净利润和扣非净利润
  • 卖护肤品赚钱吗
  • 收到供应商发票分录应怎么写?
  • 收到其他公司退款
  • 事业单位工会经费会计账务处理办法
  • 个人劳务费怎么计算
  • 交了预付款后,一方违约怎么处理
  • 关闭自动更新应用程序
  • 劳务费费用
  • php string函数
  • PHP:pg_field_name()的用法_PostgreSQL函数
  • php工程师职位描述
  • 银行存款的明细科目怎么写
  • 不征税收入税收政策
  • 委托代销视同买断会计分录怎么写?
  • elementui中的el-tab-pane为什么内容会为0
  • 增值税减免税的征管规定有哪些
  • nginx怎么搭建
  • 补缴税款后还能退税吗
  • 【Spring+SpringMVC+Mybatis】Spring+SpringMVC+Mybatis实现前端到后台完整项目
  • php对象是什么类型的数据
  • 企业所得税如何计算应纳税所得额
  • 企业管理咨询合作协议
  • 软件开发企业如何计算利润
  • 进项税额转出会影响当期纳税吗?
  • 预缴税款为什么不能跨月申报
  • phpcms v9安装教程
  • 缴纳文化事业建设费
  • 企业期末预收账款怎么算
  • 边际贡献分析法案例
  • 计提贷款准备金公式
  • sql server怎么用sql语句创建数据库
  • 未分配利润可以挂多久
  • 不能抵扣的普通发票如何做分录
  • 未开票收入账务处理分录
  • 银行存款日记账与银行对账单之间的核对属于
  • 会计科目中其期末余额应列入资产负债表存货项目的有
  • 营改增之后账务怎么处理
  • mysql启动服务器失败
  • 在windows xp中说法正确的是
  • xp系统怎么取消用户登录
  • linux的发展
  • 一台电脑多个用户组怎么显示在一个屏幕上
  • mac刻录工具
  • 苹果的mac怎么查
  • win7系统笔记本怎么连接wifi
  • 360对win7支持多久
  • win7如何整理磁盘
  • cocos2d官网
  • java调用curl命令
  • python语言面向过程吗
  • python 字符串
  • bootstrap基础教程
  • 全国税务发票查询电话
  • 社保当月减员当月还可以增加上吗
  • 长春税务局待遇如何
  • 国家税务局什么时候放假
  • 广西区国家税务局
  • 新版零申报印花税怎么申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设