美文网首页
Day30:理解递归的特例:尾递归

Day30:理解递归的特例:尾递归

作者: 快乐的老周 | 来源:发表于2020-06-21 20:15 被阅读0次

使用递归会使代码变得非常简洁,但是递归利用不慎,很容易就会出现:stack overflow 栈溢出的问题,这是因为通常的递归也需要消耗在系统调用栈上产生的隐式额外空间,这算是我们使用递归所付出的代价。

但是有一类递归非常特殊,它不受此空间开销的影响。它就是一种特殊的递归情况:尾递归。

那么,满足哪些条件才算是尾递归呢?下面的两种代码示例,哪个是尾递归,哪个是一般的递归情况呢?

写法1:

def sum1(ls):
if len(ls) == 0:
return 0
return ls[0] + sum1(ls[1:])
写法2:

def sum2(ls):
def helper(ls, acc):
if len(ls) == 0:
return acc
return helper(ls[1:], ls[0] + acc)
return helper(ls, 0)

相关文章

  • Day30:理解递归的特例:尾递归

    使用递归会使代码变得非常简洁,但是递归利用不慎,很容易就会出现:stack overflow 栈溢出的问题,这是因...

  • 尾递归

    尾递归就是操作的最后一步是调用自身的递归。 这是尾递归: (这个程序没什么意义,仅作为理解辅助之用)。 这不是尾递...

  • Kotlin语言(九):特性

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

  • 递归&尾递归

    调用栈的特点,先进后出, FILO, 场景还原。 递归 有栈溢出的可能 stack overflow 尾递归 编译...

  • C++ 递归算法

    递归算法,尾递归算法求阶乘!

  • 从汇编角度谈尾调用和尾递归的优化

    对于尾递归,很多人的理解仅局限于它是递归和尾调用的一个合体,比普通递归效率高。至于效率为什么高,高在哪,可能没有深...

  • 递归调用优化

    尾递归优化 函数调用自身,称为递归。如果尾调用自身,就称为尾递归。 递归非常耗费内存,因为需要同时保存成千上百个调...

  • 25.尾递归优化

    1.代码如下: 只有尾递归才能优化 1.需要将递归转化为尾递归2.加上关键字tailrec 2.尾递归的原理,看编...

  • 尾调用优化

    尾调用优化 尾递归 正常递归 尾递归 改写以上代码,使其只有一个参数: 总结一下,递归本质上是一种循环操作。纯粹的...

  • 1

    #函数 ##递归函数容易,栈溢出,这个时候可以用*尾递归*优化,尾递归的意思就是说在递归函数末尾引用本函数的时候,...

网友评论

      本文标题:Day30:理解递归的特例:尾递归

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