位置: 编程技术 - 正文

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

  • 资产交换的涉税处理
  • 财政的税收
  • 工商年报主营业务怎么填
  • 预计负债的会计核算
  • 有限公司能变更为个体工商户
  • 劳务服务有什么
  • 其他应付款在借方资产负债表怎么填
  • 预付账款收不到发票汇算清缴调整增吗
  • 银行回单日期晚于做账日期
  • 租借车辆发生事故后的保险理赔问题
  • 房地产企业拆迁补偿契税政策
  • 坐收坐支在会计上如何反映
  • 无形资产研发费用加计扣除是晢时差异吗
  • 电子凭证是否具有法律效力
  • 收到承兑汇票作废怎么办
  • 领用包装物会计处理
  • 企业计提短期借款利息费用应贷记的会计科目是
  • 个体工商户营业执照年检
  • 建安业核定征收利润率
  • 携税宝报税流程
  • 财务报告报送与信息采集季报怎么填写
  • 劳务派遣实缴资本
  • 免税销售额对应的进项税额
  • 工会经费结余怎么记账
  • 分项结转法怎么结转
  • 中级会计考试考后审核需要什么资料
  • linux 将一个文件的内容给另一个文件
  • 行政单位上年支出退回
  • PHP:mb_ereg_match()的用法_mbstring函数
  • Win11/Win10 21H2 正式版发布前,微软再次推送可靠性补丁更新 KB4023057
  • php更新数据库
  • 企业公益性捐赠扣除限额
  • 员工自己垫付的费用怎么走账
  • 发生错误的原始凭证包括
  • Win11 Build 22000.348更新补丁KB5007262预览版发布(附更新修复内容汇总)
  • 企业所得税申报表在哪里打印
  • 星空下的灯塔作文
  • 设备维修产生的人工费怎么开发票
  • php文件上传后只显示了路径怎么办啊
  • 科研toc
  • 公司年终奖怎么入账
  • 数据集介绍
  • echarts遇到的坑
  • 银行流水要去哪里打
  • 公司的钱借给个人必须要有利息吗
  • 一般人财务报表季报还是月报
  • 材料发票和工程发票的区别
  • 财政补贴收入账务处理
  • phpcms插件
  • 给境外公司代扣代缴税款
  • 丢失增值税发票已报税证明单取消
  • 附加税计税依据扣除留抵退税
  • 上月发票如何冲红
  • 低值易耗品属于资产类账户吗
  • 三证合一哪三个证
  • 固定资产清理如何做账
  • 增值税计入固定资产的成本吗
  • 车保险说给返钱是真的吗
  • 进项税和销项税月末怎么结转
  • 关联公司之间的借款
  • 文化事业建设费逾期未申报怎么办
  • 资产负债表所有者权益和利润表关系
  • mysql通过文档读取并执行命令之快速为mysql添加多用户和数据库技巧
  • 宏基笔记本一键恢复系统
  • window10打补丁
  • windows下用什么编程工具
  • ssh客户端软件
  • node 线程 进程
  • perl 删除文件
  • opengl网格
  • nodejs mock
  • 利用的近义词
  • unity调用c++封装的dll
  • 批处理文件是可执行文件吗
  • 基于javascript的毕业设计
  • python如何获取
  • python socketcan
  • 一般纳税人公司注销流程
  • 福建平潭综合实验区属于哪个市
  • 当月专票作废流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设