斐波那契數列就是乙個數學數列:0,1,1,2,3,5,8…
規律就是後面的數是前兩個數之和,f(n)=f(n-1)+f(n-2)
第一種遞迴實現(python):
class solution:
def fibonacci(self,n):
if n==0:
return 0
if n==1:
return 1
if n>1:
num=self.fibonacci(n-1)+self.fibonacci(n-2)
return num
return none
第二種迴圈實現(python):
class solution:
def fibonacci(self,n):
if n==0:
return 0
if n==1:
return 1
ret=0
for i in range(0,n-1):
ret=a+b
a=bb=ret
return ret
1.假如現在台階只有 1 級,n = 1,那麼這只青蛙就在只有 1 種跳法:1(1 代表一次跳 1 級台階)也就是 f(1) = 1 種跳法
2.假如現在台階只有 2 級,n = 2,那麼這只青蛙可以有 2 種跳法:1 1、2(1 代表一次跳 1 級台階,2 代表一次跳 2 級台階),也就是 f(2) = 2 種跳法
3.假如現在台階有 3 級,n = 3,青蛙可以有幾種跳法呢?
4.假如青蛙先跳了 1 級台階,還剩下 2 級台階,那它還有幾種跳法呢?通過第 2 個情況分析知道有 2 種跳法;假如青蛙先跳了 2 級台階,根據第 1 個情況分析知道有 1 種跳法,所以這時候得出 f(3) = 2 + 1 種方法
假如現在台階有 4 級,n = 4,我們利用上面的規律繼續分析可得:f(4) = 3 + 2
綜上所述,我們得出其實這個演算法就是乙個(變形)斐波那契數列問題,公式如下:
n = 1, f(1) = 1
n = 2, f(2) = 2
n > 2, f(n) = f(n -1) + f(n -2)
數學歸納
從最後一節台階開始跳,它有兩種跳法,第一次跳1階那麼剩下的就有f(n-1)種跳法,如果第一次跳2階那麼剩下的就有f(n-2)種跳法。所以也符合規律。
f(n)=f(n-1)+f(n-2)+…+f(1)
f(n-1)=f(n-2)+…+f(1)
把第二個式子帶入第乙個式子得
f(n)=2*f(n-1) ,(n > 1)
def jumpfloor(self,number):
if number==1:
return 1
ret=1
a=1for i in range(2,number+1):
ret=2*a
a=ret
return ret
劍指offer 斐波那契數列
題目1描述 寫乙個函式,輸入n,求斐波那契數列的第n項。斐波那契數列的定義如下 f n 0 n 0 f n 1 n 1 f n f n 1 f n 2 n 1 分析描述 在大多數的c語言教科書中,一般會用遞迴求斐波那契數列。如下 long long fibonacci unsigned int n ...
劍指offer 斐波那契數列
記錄來自 劍指offer 的演算法題。題目如下 寫乙個函式,輸入n,實現斐波那契數列的第n項。斐波那契數列的定義如下 f n 01 f n 1 f n 2 n 0 n 1n 1 教科書上通常在介紹遞迴的時候都會使用斐波那契數列作為例子,然後給出下列解法 long long fibonacci uns...
劍指offer 斐波那契數列
現在要求輸入乙個整數n,請你輸出斐波那契 fibonacci 數列的第n項。此題易用遞迴來實現 public intfibonacci int n 但是上述的遞迴解法有很嚴重的效率問題。以求解 f 10 為例,想求得 f 10 需要先求得 f 9 和 f 8 同樣,想求得 f 9 需要先求得 f 8...