位置: 编程技术 - 正文

Python中使用装饰器来优化尾递归的示例

发布时间:2024-02-27

推荐整理分享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年政策
  • 劳务派遣 税务
  • 简易计税的销项税怎么处理
  • 无形资产发生减值的原因
  • 公司聘请专家的差旅费可以税前扣除吗
  • 收到长期股权投资的现金股利
  • 增值税税控系统的税务处理
  • 文化用品利润怎么样
  • 销项负数盖章吗
  • 前期差错更正处理方法
  • 增值税怎么补提
  • 不经常发生应税行为的企业可以选择按小规模纳税人纳税
  • 经营租赁固定资产折旧计入什么科目
  • 技术服务合同增值税免税吗
  • 个人如何开专票
  • 开发票货物或应税服务两行怎么开
  • 事业单位洗车费如何入账
  • 营业外收支计入应纳税所得额吗
  • 应交税金月底可以有余额吗
  • 商业支付时使用
  • 单位办事人员
  • Win10 20H2 LSASS.exe自动重启故障已得到修复
  • 公司入股的钱叫什么
  • 应税货物销售额是什么意思
  • vue实现打印
  • 交易性金融资产公允价值变动计入
  • 处置二手固定资产
  • 房地产企业如何计算土地使用税
  • 会计准则新规
  • 房产税为什么会退税
  • 不是吧阿sir表情包
  • 企业自建房出售给员工个人后还需要缴纳土地使用税么
  • 土地使用税的征税范围有哪些
  • dedecms进入数据库
  • 企业转让无形资产取得的收益应计入营业外收入
  • 预付账款主要核算哪些内容
  • 收到税务局退税怎么入账
  • 新会计制度对会计人员的影响
  • 变更法人代表是重大事项吗
  • sqlserver附加数据库语句
  • 资质办理属于什么开票大类
  • 应付账款不用付情况说明
  • 在建工程借款利息计入哪里
  • 委托收款背书和质押背书都属于转让背书
  • 软件开发公司账一定按项目做吗
  • 小规模纳税人从三万到十万
  • 免抵退退税额
  • 企业控股情况怎么看
  • 利用公式计算填空题
  • sqlmap 提权
  • 创建svn库
  • dwm占用内存过高 进程处理
  • 怎么检测软件有没有毒
  • linux系统
  • linux ed
  • cocos2dx-js
  • 示例代码
  • shell程序中定义的函数能不能有参数
  • python 入门
  • 用javascript
  • jQuery+JSON实现AJAX二级联动实例分析
  • python,字符串
  • javascript基于什么的语言
  • 小米手机图库图标
  • js间隔执行的代码
  • javascript教程完整版
  • css怎么设置
  • 在linux安装python
  • 环保设备企业所得税优惠
  • 当前土地增值税优惠政策
  • 印花税会计分录怎么做 印花税需要计提吗
  • 福州灵活就业社保缴费2024年多少钱
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号