位置: 编程技术 - 正文

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

  • 小规模纳税人销售自建不动产
  • 缴纳去年的企业所得税怎么做账
  • 公司买房子可以贷款多少
  • 如何做进项税额转出,又认证不了发票
  • 缴纳上个月增值税要先计提吗
  • 个人申请代开发票流程怎么操作
  • 打印的电子发票需要盖章么
  • 公司组织旅游费用报个税吗
  • 进项和销项必须在一个月吗
  • 自然人税收管理系统怎么申报个税
  • 支票存根必须盖银行章吗
  • 权益筹资额计算公式
  • 应付债券转为实际债务
  • 行政事业单位会计制度
  • 销售企业资金风险点有哪些呢
  • 以股东投资为基础
  • 软件即征即退怎么算
  • 发票作为付款凭证的案例
  • 小规模纳税人可以开3%的专票吗
  • 小规模纳税人转成一般纳税人条件
  • 增值税主要有三种类型
  • 购买食堂餐具开票怎么开
  • 企业间借款利息开票税目
  • 企业的财产清查属于帐证核对?
  • 土地溢价款如何计算
  • 公司集体旅游会计处理
  • 固定资产清理会计处理例题
  • 污水处理费谁来收
  • 未确认融资费用的期初余额
  • 所得税预缴资产怎么计算
  • 员工报销现在用什么软件
  • 退休人员再就业受伤算工伤吗
  • 支付国外佣金代扣代缴企业所得税怎样记账
  • 1697510839
  • 总账每个月都要结账吗
  • 建筑企业分包工程的纳税人
  • 旅游门票怎么做分录
  • 债权转增资本的条件
  • 消费税有减免政策吗
  • 代发工资有什么弊端
  • 百香果的功效与作用及食用方法果的籽能嚼碎吃吗?
  • 交易性金融资产的账务处理
  • 报销费用填制什么凭证
  • vue项目eslint配置
  • web应用程序的主要组成部分
  • 金蝶存货核算不能结账,能强制结账吗
  • 网上学电脑
  • mysql列表
  • 办公室租金会有公摊吗
  • 评估费用由谁承担
  • 个体工商户免费开票额度
  • sqlsever注释符号
  • 公司购烟酒怎么入账
  • 企业非正常损失如何处理
  • 发放个税返还用不用申报
  • 未确认融资费用是什么类科目
  • 公司向个人借款的会计分录怎么做
  • 将税后利润首先用于增加投资
  • 行政事业单位如何加强预算管理
  • 税控设备设置在哪儿
  • 商业企业所有者的权益
  • mysql数据库自动重启
  • windows hellopin是什么意思
  • windows10右键菜单打开太慢
  • unix系统什么样子
  • ubuntu搭建vsftp
  • Linux中怎么安装nano已经有安装包了
  • win10系统无法启动
  • win8语言设置
  • win10隐藏图标不显示
  • linux终端怎么用
  • 什么是血糖
  • Win8开启SmartScreen筛选器保护上网安全
  • js实现原理
  • 自定义标签的开发的3个步骤?
  • javascript的dom
  • mapper--图片热点区域高亮组件官方站点
  • windows搭建python运行环境
  • 财政部监制的发票
  • 3.0t交强险
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设