python算法爬楼梯

题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。请问有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数,其范围为:1 ≤ n ≤ 100。
在这里插入图片描述
在这里插入图片描述

方法一:直接递归法

def func(n):
    if n == 1 or n == 2:
        return n
    return func(n - 1) + func(n - 2)
print(func(6))

当n比较大时,这种方法效率很低。

方法二:递归、保存中间值法

把计算过的值存入字典,防止重复计算
如计算f(6),需要求f(5)和f(4),计算f(5)需要求f(4)和f(3),那么f(4)就被重复计算了
在这里插入图片描述

adict = {}
def func(n):
    if n == 1 or n == 2:
        return n
    if adict.get(n,None) != None:
        return adict.get(n,None)
    else:
        result = func(n - 1) + func(n - 2)
        adict[n] = result
        return result
print(func(6))

这种方法效率会高很多,其实也可以通过循环来实现

方法三:循环法,自底向上累加

在这里插入图片描述

def func(n):
    a, b = 1, 1
    while n > 1:
        a, b = b, a + b
        n -= 1
    return b
print(func(6))

这种方法的效率也很高

参考

视频:https://www.bilibili.com/video/BV1eg411w7gn?p=5&spm_id_from=pageDriver&vd_source=0467ab39cc5ec5940fee22a0e7797575

文章:https://www.jianshu.com/p/301f7bb7b574

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值