美文网首页
Python的尾递归优化

Python的尾递归优化

作者: 小码弟 | 来源:发表于2018-10-17 18:59 被阅读0次

今天在刷算法时,遇到尾递归的概念,之前也看到过,但是没有深究,只知道尾递归效率高。今天学习了一下.

什么是尾递归:

尾递归的定义很简洁: 递归语句是函数的最后一条语句

为什么高效?

我们知道操作系统使用堆栈来处理递归,对于一般的递归,操作系统要在堆栈上新建一个栈帧来存储当前调用函数的数据,比如局部变量、现场信息、返回地址等。每递归一次就新建一个栈帧,压到栈顶。如果处理很深的递归或函数处理数据很大时,很有可能造成栈溢出。
而对于尾递归,编译器会作出一些优化。即若编译器发现这次递归是尾递归,它不会去新建一个栈帧,而是用当前函数的信息覆盖掉栈顶栈帧中的信息。之所以能这么做是因为递归语句位于函数的最后,前面的计算工作都已经完成了,不用保存中间结果。这样一来省去了创建栈帧的开销;二来避免了栈溢出。

程序测试

Snip20181017_3.png

上图两个阶乘函数,第一个不是尾递归,第二个是尾递归。计算10!,二者差了0.00002s。如果计算量很大时,差异可能就会明显起来。

相关文章

  • python3 尾递归优化装饰器

    python3中没有进行尾递归优化,但是我们可以实现通过一个装饰器实现尾递归优化。 网上常见的尾递归装饰器是基于P...

  • 什么是尾调用?什么是尾递归?尾调用的优化?尾递归优化?

    尾调用优化 尾递归(尾调用优化)

  • Kotlin语言(九):特性

    1、尾递归优化 尾递归:函数在调用自己之后没有再执行其他任何操作就是尾递归 尾递归优化的原理就是将递归转换成迭代,...

  • Python的尾递归优化

    今天在刷算法时,遇到尾递归的概念,之前也看到过,但是没有深究,只知道尾递归效率高。今天学习了一下. 什么是尾递归:...

  • 第2模块第1章2829递归的作用尾递归优化

    尾递归优化 def cal(n): print(n) return cal(n+1) cal(1) 尾递归优化并不...

  • Python开启尾递归优化!

    原文出处: neo1218 一般递归与尾递归 一般递归 执行: 可以看到, 一般递归, 每一级递归都需要调用函数,...

  • python尾递归优化问题

    在思否上面看到了这样一篇的文章:讲述了如何去除python对递归的限制,看完后不得不对他佩服,不过仔细想想也是挺合...

  • 尾递归优化

    “尾递归优化”的含义是:如果递归函数属于尾递归,那么运行时会优化其调用过程。优化主要针对调用栈,将多层调用,转化为...

  • 9. 递归函数

    使用递归函数需要注意防止栈溢出解决递归调用栈溢出的方法是通过尾递归优化遗憾的是,大多数编程语言没有针对尾递归做优化...

  • 递归优化-尾递归

    一、定义 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 二、利弊 递归函数...

网友评论

      本文标题:Python的尾递归优化

      本文链接:https://www.haomeiwen.com/subject/xmgrzftx.html