Python递归函数

什么是递归?

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

递归的特性:

  1. 递归函数必须有一个明确的结束条件。
  2. 每进入更深一层的递归时,问题规模相对于上一次递归都应减少。
  3. 相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。
  4. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

 

递归实现

构建一个递归函数用来计算乘阶

def fact(n):
    if n == 1:
        return n
    else:
        return n * fact( n-1 )
print(fact(3))

原理:

fact(3)

3 * fact( 3-1 )

3 * (2 * fact( 2-1 ))

3 * (2 * 1)

3 * 2

6

优缺点分析

虽然有代码简洁的优点,但是时间和空间消耗比较大。每一次函数调用都需要在内存栈中分配空间以保存参数,返回地址以及临时变量,而且往栈里面压入数据和弹出都需要时间。

另外递归会有重复的计算。递归本质是把一个问题分解为多个问题,如果这多个问题存在重复计算,有时候会随着n成指数增长。斐波那契的递归就是一个例子。 

递归还有栈溢出的问题,每个进程的栈容量是有限的。

 

posted @ 2020-09-17 11:33  熔岩魔神  阅读(97)  评论(0编辑  收藏  举报