题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
第一种分析方法,归纳总结:
![266b1cb929e51fc240afc405140efd68.png](https://i-blog.csdnimg.cn/blog_migrate/33458b5f05b26efeffd60852352ab824.png)
从上表可以发现:
当n=1时,f(n)=1
当n=2时,f(n)=2
当n=3时,f(n)=4
当n=4时,f(n)=8
由此得出结论:f(n) = 2^(n-1)
第二种分析方法,分析法:
青蛙从n=1开始跳和从n=n开始跳是一样的。
当青蛙第一步跳了1级台阶之后,它还有(n-1)个台阶要跳,因此,青蛙选择第一步跳1级台阶的跳法取决于后面(n-1)级台阶的跳法,记为f(n-1);然后青蛙第一步还可以选择一次跳两级台阶,此时,青蛙还有(n-2)级台阶要跳,因此,青蛙选择第一步跳1级台阶的跳法取决于后面(n-2)级台阶的跳法,记为f(n-2);…。所以,青蛙跳到n级台阶的总跳法记为:f(n) = f(n-1) + f(n-2) + f(n-2) + … + f(1)
而f(n-1) = f(n-2) + f(n-3) + … + f(n)
因此,f(n) = 2f(n-1)
n=1时,f(n)=1
n=2时,f(n)=2
…
f(n)是等比数列,其通项为f(n)=2^(n-1)
Python示例代码1:
def jumpFloorII(self, number):
# return 2 ** (number - 1)
return pow(2,number-1)
python示例代码2:
def jumpFloorII(self, number):
if number == 0:
return 0
if number == 1:
return 1
a = 1
ret = 1
for i in range(2,number+1):
a,ret = ret,2*ret
return ret
python示例代码3:
def jumpFloorII(self, number):
if number == 0:
return 0
if number == 1:
return 1
a = 1
ret = 1
for i in range(2,number+1):
ret = 2 * a
a = ret
return ret
![fe7211fa44d44ec8d25757016ebd3b9a.png](https://i-blog.csdnimg.cn/blog_migrate/7c88568ec18cc392141227bcb3f1e2b1.png)
视频链接:https://www.bilibili.com/video/av64288683?p=3