前些天做ieee校內演算法賽的時候,遇到了一道關於斐波那契數列的題,要求是對數時間;今天在牛課網上刷leetcode,看到爬樓梯問題,於是在網上搜尋了一下,自己參考並總結了下斐波那契數列及其演算法。主要參考了知乎這個問題下的回答最高贊回答。
斐波那契數列大家應該都很熟悉:0 1 1 2 3 5 8… ,遞推公式如下: f(
n)=
//位運算版本
int my_power(int x, int n)
return result;
}
例如求210
2
10,10=
(1010)(
2)10=(
1010)(
2)
,分二進位制位上為1和為0兩種情況討論。
所以可以用同樣的方法求矩陣的冪,我們宣告了乙個二階矩陣類,只給了矩陣的四個元素、預設建構函式和過載operator*
:
//definition for 2-dimension matrix
struct matrix
matrix& operator*(const matrix& rhs)
};/*對數演算法,利用矩陣的快速冪*/
matrix fast_multi(int n)
return result;
}
因此斐波那契數列的第n項的演算法為:
//這裡沒有考慮int溢位
int fibonacci(int n)
若斐波那契數列的初值為f0和f1:
//這裡沒有考慮int溢位
int fibonacci(int n, int f0, int f1)
最開始說到ieee校內演算法賽的那道題是要求斐波那契數列的前n項和: sn
=f(n
+2)−
f(1)
; sn=
f(n+
2)−f
(1);
這個結論用數學歸納法是非常容易證明的。
斐波那契數列及其應用
這個數列從第2項開始,每一項都等於前兩項之和。常規解法 long long fibonacci unsigned int n 效率更高的解法 include using namespace std int main cout return 0 問題的變種 問題描述 乙隻青蛙一次可以跳上1級台階,也可...
斐波那契數列及其變型
大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 n 39 f n f n 1 f n 2 class solution int fibonacci int n 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法...
斐波那契數列 斐波那契數列python實現
斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...