• 递归指的是调用自己的函数。
  • 每个递归函数都有两个条件:基线条件和递归条件。
  • 栈有两种操作:压入和弹出。
  • 所有函数调用都进入调用栈。
  • 调用栈可能很长,这将占用大量的内存。

基线条件和递归条件

每个递归函数都有两部分:基线 条件(base case)和递归条件(recursive case)。

  • 递归条件指的是函数调用自己,
  • 基线条件指的是函数不再调用自己,从而避免形成无限循环。

递归调用栈

factorial(3)写作3!,其定义如下:递归 - 图1
下面是计算阶乘的递归函数。

  1. def factorial(x):
  2. if x == 1:
  3. return 1
  4. else:
  5. return x * fact(x-1)

分析调用栈的工作原理

__递归1.png
__递归2.png