劍指Offer一刷 斐波那契數列(C )

2021-10-09 04:50:00 字數 1214 閱讀 5157

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。n<=39

斐波那契數列由 0 和 1 開始,之後的斐波那契數就是由之前的兩數相加而得出。f(0) = 0, f(1) = 1 f(n) = f(n - 1) + f(n - 2), 其中 n > 1.

解法一:

最直接想到的就是遞迴。也就是從n到0考慮通過f(n) = f(n - 1) + f(n - 2)得出結果。然而遞迴要呼叫自身,函式呼叫需要時間空間還有很多重複計算,對效能有負面影響。

class

solution

return

fibonacci

(n -1)

+fibonacci

(n -2)

;}return-1

;}};

解法二:

反向考慮,從0到n,把左腳想象成i-2項,右腳是i-1項。每次迴圈右腳加左腳的結果都更新在右腳上,再把左腳踩到原本的右腳位置, 想象成左腳右腳不超越式前進。

class

solution

// f(n-2)

int a =0;

// f(n-1)

int b =1;

while

(n >1)

return b;

}return-1

;}};

和解法二類似,迴圈計數為奇數則不動右腳,把右腳加左腳的和更新在左腳,而超越右腳。為偶數時,把右腳加左腳的結果更新在右腳, 想象成正常走路,左腳右腳超越式前進。

tips: 奇偶數判斷除了% 2還可以用按位與& 1,但值得注意的是&的優先順序小於==,所以判斷偶數時 if ((n&1)==0) 一定要帶上括號

class

solution

// f(n-2)

int a =0;

// f(n-1)

int b =1;

int i =2;

while

(i <= n)

else

i++;}

if(!(n&1)

)else

}return-1

;}};

劍指offer刷題 斐波那契數列

題目一 寫乙個函式,輸入n,求斐波那契數列的第n項。對於題目一,接觸過遞迴人可能首先想到的就是通過遞迴的方法解決問題,例如計算第10項的斐波那契數列首先來看一下遞迴解決問題的思路,主要如下圖所示 我們可以發現,採用這種方式,做了很多的重複工作,例如f 8 就計算了兩次,第n是乙個非常大的數時,這耗費...

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