一、递归函数


函数是可以被调用的,且一个函数内部可以调用其他函数。如果一个函数在内部调用本身,这个函数就是一个递归函数。函数递归调用的过程与循环相似,而且理论上,所有的递归函数都可以写成循环的方式,但是递归函数的优点是定义简单,逻辑清晰。递归和循环都是一个重复的操作的过程,这些重复性的操作必然是需要有一定的规律性的。另外,很明显递归函数也需要一个结束条件,否则就会像死循环一样递归下去,直到由于栈溢出而被终止(这个下面介绍)。

可见,要实现一个递归函数需要确定两个要素:

  • 递归规律

  • 结束条件

1. 实例:计算正整数n的阶乘 n! = 1 * 2 * 3 * ... * n

循环实现

思路有两个:

  • 从1乘到n,需要额外定义一个计数器存放n当前的值

  • 从n乘到1,无需额外定义计数器,直接对n进行减1操作,直到n=0返回1结束

def fact(n):
    if n == 0:        return 1
    
    result = 1
    while n >