Python实现台阶问题/斐波纳挈

在Python中实现台阶问题(也常被称作爬楼梯问题)和斐波那契数列(Fibonacci sequence)是编程中的经典问题。虽然这两个问题在表面上看起来不同,但它们之间有着紧密的联系,因为台阶问题的一种常见解法就是使用斐波那契数列。

台阶问题

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

这个问题可以通过递归或动态规划来解决,使用斐波那契数列的思路。

递归解法(效率较低,因为存在大量重复计算)

def climbStairs(n: int) -> int:  
    if n <= 1:  
        return 1  
    elif n == 2:  
        return 2  
    else:  
        return climbStairs(n-1) + climbStairs(n-2)

动态规划解法(更高效)

def climbStairs(n: int) -> int:  
    if n <= 1:  
        return 1  
    dp = [0] * (n+1)  
    dp[1] = 1  
    if n >= 2:  
        dp[2] = 2  
    for i in range(3, n+1):  
        dp[i] = dp[i-1] + dp[i-2]  
    return dp[n]

斐波那契数列

斐波那契数列是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...,即第一项是0,第二项是1,从第三项开始,每一项都等于前两项之和。

递归解法(同样效率较低)

def fibonacci(n: int) -> int:  
    if n <= 0:  
        return 0  
    elif n == 1:  
        return 1  
    else:  
        return fibonacci(n-1) + fibonacci(n-2)

动态规划解法(更高效)

def fibonacci(n: int) -> int:  
    if n <= 1:  
        return n  
    dp = [0] * (n+1)  
    dp[1] = 1  
    for i in range(2, n+1):  
        dp[i] = dp[i-1] + dp[i-2]  
    return dp[n]

或者,使用记忆化递归,这也是一种提高递归效率的方法:

def fibonacci_memo(n: int, memo: dict = None) -> int:  
    if memo is None:  
        memo = {0: 0, 1: 1}  
    if n not in memo:  
        memo[n] = fibonacci_memo(n-1, memo) + fibonacci_memo(n-2, memo)  
    return memo[n]

在Python中,对于递归解法,尤其是当n较大时,由于Python的递归深度限制(默认1000),可能无法直接计算,而动态规划或记忆化递归是更好的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ac-er8888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值