python 递归 之 尾递归

桃扇骨 2022-05-21 00:51 407阅读 0赞

递归函数可以方便的处理一些事物,但普通的递归是栈的堆积,如果堆积的过多就占用过多的内存资源,形象的一些递归就是就像是塔一样,从下至上层层叠加,直到,到达python的限制抛出异常,或者达到预设的条件。

  1. def recursive(n):
  2. if n == 1:
  3. return n
  4. else:
  5. return n*recursive(n-1)

这个是示例是普通的递归函数,假如我们给n 值为5 我们在栈中可以是这样的理解:

  1. 5*4*3*2*recursive(1)
  2. 5*4*3*recursive(2)
  3. 5*4*recursive(3)
  4. 5×recursive(4)

这就是栈的堆积,如果n值够大,这无形中占据了大量的内存资源

尾递归
我们看看示例

  1. def tail_recursive(n, total =1):
  2. if n == 1:
  3. return total
  4. else:
  5. return tail_recursive(n-1,total*n)

这里我们可以看出,这个递归方式每一次对于total 重新复制,分配新的内存,并回收原有的内存占用。这无形中提高了递归的效率,但python对于递归的优化支持有限。所以层级太深就会抛出异常。

发表评论

表情:
评论列表 (有 0 条评论,407人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java

    一、序言 尾调用 维基百科 > 在计算机学里,尾调用是指一个函数里的最后一个动作是返回一个函数的调用结果的情形,即最后一步新调用的返回值直接被当前函数的返回结果。

    相关 python

    在计算机中,函数调用是通过栈(stack)这种数据结构(后进先出)实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,

    相关

    尾递归 如果要说尾递归的话,那么首先应该先说一下递归函数。递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但是循环的逻辑不如递归清晰易理解

    相关 python

    递归函数可以方便的处理一些事物,但普通的递归是栈的堆积,如果堆积的过多就占用过多的内存资源,形象的一些递归就是就像是塔一样,从下至上层层叠加,直到,到达python的限制抛出异

    相关

    什么是尾递归 什么是尾递归呢?(tail recursion), 顾名思议,就是一种“不一样的”递归,说到它的不一样,就得先说说一般的递归。对于一般的递归,比如下面

    相关

    尾递归就是说一个递归函数,在return语句中调用了这个递归函数本身,如图所示。从理论上来说,尾递归都可以用非递归的方法实现。 ![这里写图片描述][70] [70]

    相关

    1、递归 简单的来说递归就是一个函数直接或间接地调用自身,是为直接或间接递归。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满