# 函数定义中调用函数自身的方式
'''
两个关键特征
       1          n=0
n! =  -----       otherwise
      n(n-1)!

  - 链条：计算过程存在递归链条
  - 基例：存在一个或多个不需要再次递归的基例

类型数学归纳法
  - 证明当n取第一个值n0时命题成立
  - 假设当 n下标k 时命题成立，证明当n= n下标k+1 时命题也成立
  - 递归是数字归纳法思维的编程体现
'''
def fact(n):
    if n == 0:
        return 1
    else:
        return n * fact(n-1)

# 函数 + 分支语句
# - 递归本身是一个函数，需要函数定义方式描述
# - 函数内部，采用分支语句对输入参数进行判断


