跳至内容

Python递归

递归是在处理过程中调用处理过程本身。现实世界中就好比有两面镜子,它们互相对着,你可以在A镜子中看到B镜子,B镜子中看到A镜子,如此反复。

递归函数

Python中,一个函数内可以调用另外一个函数,甚至是调用这个函数自身。这种函数调用其自身的称为递归函数。

需要注意的是,递归函数必须要有一个终止条件可以停止递归,否则的话就会出现无限循环。Python为了避免堆栈溢出,对递归深度做了限制。默认情况下,最大递归深度是1000. 超过递归深度,触发 RecursionError 异常。

递归调用图例递归调用

阶层函数递归

python
def factorial(num):
    if num == 1:
        return 1
    else:
        return num * factorial(num - 1)

fac = factorial(3)
print("3的阶层是:", fac)


# 输出:
# 3的阶层是:6
def factorial(num):
    if num == 1:
        return 1
    else:
        return num * factorial(num - 1)

fac = factorial(3)
print("3的阶层是:", fac)


# 输出:
# 3的阶层是:6

这里,factorial函数就是一个递归函数。 第1次调用:factorial(3) 第2次调用:3factorial(2) 第3次调用:32factorial(1) 返回第3次: 321 返回第2次:32 返回第1次:6

递归的优缺点

优点:

  • 递归函数可以让代码更整洁优雅
  • 通过递归可以将复杂任务拆解为更简单的子任务
  • 序列生成使用递归更方便

缺点:

  • 递归逻辑不容易理解
  • 递归函数效率比较低,因为递归会占用很多内存
  • 递归函数不容易调试