转载请注明:https://blog.csdn.net/u012572354/article/details/89553636
能力有限,如有问题请指出,共享知识,谢谢!
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
分析:
设跳到第n-2和n-1个台阶跳法为、,跳到第n阶楼梯有2种,从分别第n-2和n-1个台阶跳2个和1个台阶。则跳到第n阶楼梯的跳法为,,,。台阶的跳法满足斐波那契数列。则。跳法:,,。
斐波那契数列的通项公式:
则跳台阶通项公式:
解法1:
采用通向公式编程。
# -*- coding:utf-8 -*
import math
class Solution:
def jumpFloor(self, number):
# write code here
s=math.sqrt(5)
a=pow((1+s)/2.0,number+1)
b=pow((1-s)/2.0,number+1)
y=math.floor(s/5.0*(a-b))
return y
解法2:
采用迭代法,。由于计算机对递归太敏感,会造成超时,一般要避免采用递归方法。
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
# write code here
a=1
b=1
for i in range(1,number):
if number==1:
return b
else:
a, b = b, a+b
return b
斐波那契数列的通项公式求解
对于,对应方程,求解
则,,求出,。
斐波那契数列的如何推导通项公式?如何对应的方程:
对于斐波那契数列,,,令
,为常系数,此为等比数列。
,则
则等比数列,
假设存在和,且,满足,则
因此,
由于和满足,假设,则等价于方程, 简化。存在解满足方程。故斐波那契数列对应的特征方程为: