Python-递归复习-斐波那契-阶乘-52

# 超过最大递归限制的报错
# 只要写递归函数,必须要有结束条件。

# 返回值
# 不要只看到return就认为已经返回了。要看返回操作是在递归到第几层的时候发生的,然后返回给了谁。
# 如果不是返回给最外层函数,调用者就接收不到。
# 需要再分析,看如何把结果返回回来。

# 循环 大部分递归都可以用for循环实现
# 递归

# 斐波那契  # 问第n个斐波那契数是多少

# fib(6) = fib(5) + fib(4)
# fib(5) = fib(4)+fib(3)
# fib(4) = fib(3)+fib(2)
# fib(3) = fib(2)+fib(1)
# fib(2) = 1
# fib(1) = 1

#递归调用两个本身函数-执行速度慢
def fib(n):
    if n == 1 or n==2:
        return 1
    return fib(n-1) + fib(n-2)

print(fib(50))

#递归调用一个本身函数-执行速度快
def fib(n,a=1,b=1):
    if n==1 : return a
    return fib(n-1,b,a+b)

print(fib(50))

 

def fib(n):
    if n == 2:
        return 1, 1
    else:
        a,b = fib(n-1)
        return b, a+b


def fib(n,l = [0]):
    l[0] +=1
    if n ==1 or n == 2:
        l[0] -= 1
        return 1,1
    else:
        a,b = fib(n-1)
        l[0] -= 1
        if l[0] == 0:
            return a+b
        return b,a+b
print(fib(6))


阶乘:

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

print(fac(100))

 



转载于:https://www.cnblogs.com/LXL616/p/10714435.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值