跳台阶问题及其变种
问题描述
一个青蛙跳台阶,一次可以跳一步,也可以跳两步,则这只青蛙跳上n级台阶一共有多少种方法?
解析
类似斐波拉契数列,青蛙跳上第n级台阶,不是从第n-1级就是n-2级跳上来的,故可以转换为n-1和n-2的问题,即f(n)=f(n-1)+f(n-2)
,就是一个斐波拉契数列的问题。
代码
1 | int jumpStep(int n) |
变种问题
一个青蛙跳台阶,一次可以最多跳n步, 求跳上n级台阶的方法。
解析
由上述可得递推公式,f(n)=f(n-1)+f(n-2)+...+f(1)+f(0)
,故f(n-1)=f(n-2)+...+f(0)
,以此f(n)=2f(n-1)
,该情况下n>1,而n=1时,f(1)=f(0)=1
,故:f(n)=2f(n-1)=2^2f(n-2)=...=2^n-1f(1)=2^n-1
,而n=1也符合这个公式,因此f(n)=2^n-1
代码
1 | int jumpStep(int n) |