劍指offer演算法 斐波那契數列

2021-09-27 09:03:50 字數 1462 閱讀 5737

day 4

斐波那契數列都很熟悉了。

斐波那契數列(fibonacci sequence),又稱**分割數列、因數學家列昂納多·斐波那契(以兔子繁殖為例子而引入,故又稱為「兔子數列」,指的是這樣乙個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波那契數列以如下被以遞推的方法定義:f(1)=1,f(2)=1, f(n)=f(n-1)+f(n-2)(n>=3,n∈n*

題目僅僅是更改為0、1、1、2、3、8、13、21、34而已

一開始,就想著直接寫就是:

public

class

solution

else

if(n==

0||n==1)

else

}}

嗯,太年輕了。

然後想能不能優化下遞迴,因為遞迴會重複計算大量相同資料。

遞迴因為要不斷地呼叫函式自身,呼叫函式就伴隨著引數以及函式區域性變數入棧,當遞迴層數較大容易產生棧溢位,所以通常需要我們使用迴圈優化遞迴演算法。只需要將前面的暫存就行了。

優化如下:

public

class

solution

if(n==1)

for(

int i=

2;i<=n;i++

)return fn;

}}

其實就是如下很簡單的乙個迴圈,

新的f1+f2   f2就是新的f1   fn就是新的f2;

0、1、1、2、3、5…

f1   f2   fn

0 + 1 = 1

1 + 1 = 2

1 + 2 = 3

…解決了大量的重複計算。

js補充:

function

getfib

(n)return n3;

}

1、遞迴(普通版)

function

fibonacci

(n);

return

fibonacci

(n -1)

+fibonacci

(n -2)

;}

2.遞迴(優化版

function

fibonacci2

(n , ac1 =

1, ac2 =1)

;return

fibonacci2

(n -

1, ac2, ac1 + ac2)

;}

劍指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...