python语法基础-递归函数

递归函数

递归:函数间接或者直接调用自己
优点:简洁,理解容易
缺点:对递归深度有限制,消耗资源大

递归分两个过程
往下调用,分解的过程
往上回溯,综合的过程
递归需要注意
一定要有结束条件
是以资源换取编写速度
python对递归深度有限制,超过限制报错

# 递归函数深度限制代码
x = 0
def fun():
    global x
    x += 1
    print(x) # 函数自己调用自己
    fun()
fun()                #  RecursionError: maximum recursion depth exceeded while calling a Python object
# func_a 表示计算阶乘
# 利用数学公式
def func_a(n):
    print(n)
    if n == 1:
        return 1
    return n * func_a(n-1)
rst = func_a(5)
print("f(5) = ", rst)

斐波那契额数列
一列数字,第一个值为1,第二个值为1,从第三个开始,每个数字的值等于前两个数字出现的值的和。

# 斐波那契额数列
def fib(n):
    if n == 1 or n == 2:              #公式  f(n) = f(n-1) + f(n-2) n>=3
        return 1                      #       f(n) = 1, n = {1,2}
    return fib(n-1) + fib(n-2)
rst = fib(10)
print("rst = ", rst)

注解:汉诺塔规则:1每次只能移动一个盘子,2任何一次移动,三个塔的状态必须是小盒子在上,大盒子在下

# 汉诺塔
a = 'A'
b = 'B'
c = 'C'
def hano(a,b,c,n):
    if n == 1:
        print("{}-->{}".format(a,c))
        return None
    if n == 2:
        print("{}-->{}".format(a,c))
        print("{}-->{}".format(a,b))
        print("{}-->{}".format(b,c))
        return None
    hano(a,c,b,n-1)
    print("{}-->{}".format(a,c))
    hano(b,a,c,n-1)
hano(a,b,c,5)

hano(a,b,c,5)
输出结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值