Python 函数递归

函数定义定义中又调用函数自己,这种方式就叫做递归。

递归示例

数学中n的阶乘定义为:n!=n*(n-1)*(n-2)*...*1

使用递归来定义求阶乘函数,代码如下:

def fact(n):
    if n == 1:      # 1的阶乘就是1
        return 1
    return n * fact(n - 1)      # n的阶乘等于 n乘以(n-1) 的阶乘

print(fact(3))      # 6

执行过程解释:

(1)首先执行fact(3),根据函数定义,会执行到 return 3*fact(2) ;由于又调用了 fact(2),程序不会立即 return 返回,而是会开始执行fact(2)

(2)执行fact(2),根据函数定义,会执行到 return 2*fact(1) ;由于又调用了 fact(1),程序不会立即 return 返回,而是会开始执行fact(1)

(3)执行fact(1),根据函数定义,将执行 return 1fact(1)执行完毕,返回1

(4)fact(2)的 return 2*fact(1),由于fact(1)已经完成了并返回1,那么就是 return 2*1,没有新的调用,fact(2)执行完成,返回2

(5)fact(3)的 return 3*fact(2),由于fact(2)已经执行了并返回2,那么就是 return 3*2,没有新的调用,fact(3)执行完成,返回最终的结果6。

递归使用注意事项

  • 递归必须有出口,也就是有停止条件,并且必须在递归调用过程中向停止条件靠近,否则会出现死循环;也就是说递归到最后要能直接给出结果。

  • 要满足每次递归要有相同的处理过程。

 

posted on 2023-04-04 14:08  木去  阅读(71)  评论(0)    收藏  举报