python之递归函数

递归函数

例如计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示:

fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n

显然fact(n)=n x fact(n-1),但当n = 1时,需要做特殊处理

递归函数定义形式如下:

def fact(n)
    if n == 1:
        return 1
    return n * fact(n-1)

当n取值很大时,递归函数调用时会引起栈溢出,为了解决栈溢出问题,通常通过尾递归优化。

【尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式】:

#尾递归定义形式
def fact(n):
    return fact_iter(n, 1)

def fact_iter(num, product):
    if num == 1:
        return product
    return fact_iter(num - 1, num * product)
-------------------------------------------------------------------------------------------
#执行过程
----->fact(5)
----->fact(5,1)
----->fact(4,5)
----->fact(3,20)
----->fact(2,60)
----->fact(1,120)
----->120

练习【利用递归函数移动汉诺塔】

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def move(n,a,b,c):
    if n == 1:
        print('move',a,'--->',c)
    else:
        move(n-1, a, c, b)
        move(1,a,b,c)
        move(n-1,b,a,c)
move(4,'A','B','C')

 

参考资料

原文地址:https://www.cnblogs.com/ilym/p/8315311.html