劍指offer 斐波那契數列

2021-10-05 05:04:53 字數 1533 閱讀 3772

斐波那契數列就是乙個數學數列: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...