递归

递归函数:在函数中调用自己
特点:
    必须有一个明确的结束,return
举例1:
def fact(n):
    """求n的阶乘"""
    if n == 1:
        return 1
    elif n > 1:
        return n * fact(n-1)
缺点:函数的调用是栈实现的,调用一次栈便增加一层栈帧,返回函数则减去一层,栈不是无限的,
过多的调用会使栈溢出,尾递归函数可以解决这个问题,在调用函数是返回自身,并且在返回中不含表达式,
但是因为编译器没有考虑这个问题,所以即使使用尾递归优化,还是会出现栈溢出
def fact(n):
    return fact_item(n,1)
    
def fact_item(num,faction):
    if num == 1:
        return 1
    elif num > 1:
        return fact_item(num-1,num*faction)
举例2:
def move(n,a,b,c):
    """汉诺塔的移动"""
    if n == 1:
        print(a + '-->' c)
        return
    move(n-1,a,c,b)
    move(1,a,b,c)
    move(n-1,b,a,c)
三根柱子,把程序分为三部分
1)把a柱上的前n-1个盘子先移动到b柱上
2)在把a柱上最后一个盘子放到c柱上
3)在把b柱上的盘子放到c上    

 

posted @ 2020-06-13 17:36  pywhy  阅读(109)  评论(0)    收藏  举报