用递归求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