用递归求n台阶问题

上台阶问题:有n级台阶,每步可以走一级或者两级,问有多少种不同的走法?

递归的思想:先做一步,整个问题是否变成与之前形式相同,但规模更小的问题?如果是,就可以采用递归。

 

n级台阶,先走一步,那么分为两种情况:

第一步走一级,或者第一步走两级。第一步走一级就转换为求(n-1)级台阶的问题,第一步走两级就转换为走(n-2)级台阶的问题,T(n)=T(n-1)+T(n-2),

n-1级台阶问题,有分为第一步走一级或者两级,T(n-1)=T(n-2)+T(n-3),以此类推,最终都会以T(1)和T(2)得形式存在

def ways(n):
    if n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        return ways(n-1) + ways(n-2)

print(ways(10))

 

虽然递归可以解此问题,但空间复杂度大,当输入规模较大时,甚至得不到结果

另解:

由上已知T(n) = T(n-1)+T(n-2)

 

def ways2(n):
    if n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        a, b = 1, 2
        i = 2
        while( i < n):
            a, b = b, a+b
            i += 1
        else:
            return b

 

 

posted @ 2021-03-08 23:11  李成敏  阅读(427)  评论(0编辑  收藏  举报