/*
第 19 題:
題目:定義 fibonacci 數列如下:
f(n)=1 n=0
f(n)= 1 n=1
f(n-1)+f(n-2) n=2
輸入n,用最快的方法求該數列的第 n 項。
基本的方法有2種
還有個網上方法:
其數學基礎:
方陣 = n-1方
即前者表示乙個2x2的方陣,
後者表示乙個第一行為1,1、第二行為1,0的方陣的n-1次方。
矩陣的n-1次方的結果的第一行第一列就是f(n),
現在的問題轉換為求矩陣的乘方。
但我們可以考慮乘方的如下性質:
/ an/2*an/2 n為偶數時
an=
\ a(n-1)/2*a(n-1)/2 n為奇數時
要求得n次方,我們先求得n/2次方,再把n/2的結果平方一下。
分治法。求n變為2個n/2
這樣求n次方就只需要logn次運算了。
*/#include using namespace std;
// 遞迴方法,時間複雜度o(n)
int fibonacci1(int n)
// 額外空間迴圈方法,時間複雜度o(n)
int fibonacci2(int n)
else
} int fibonacci3(int n)
; int result[4]=;
power(a, n, result);
return result[0];
} int main()
斐波那契數列,用最快的方法求該數列的第n項
題目 定義fibonacci數列如下 0 n 0 f n 1 n 1 f n 1 f n 2 n 2 輸入n,用最快的方法求該數列的第n項。分析 在很多c語言教科書中講到遞迴函式的時候,都會用fibonacci作為例子。最快當然是矩陣快速冪了 1,0 不懂矩陣快速冪可以先看指數快速冪 pragma ...
求Fibonacci數列的第n項
題目 定義fibonacci數列如下 遞迴的方法,如下 include using namespace std int fibona int n int main 從下往上計算,首先根據f 0 和f 1 計算f 2 再根據f 1 和f 2 求出f 3 依此類推就可以算出第n項了,時間複雜度為o n ...
求斐波那契數列的第n項
斐波那契數列的定義如下 f 0 0 f 1 1 f n f n 1 f n 2 n 2 1,1,2,3,5,8,13,21,34,55,89,144,233,377,給出n,求f n 由於結果很大,輸出f n 1000000009的結果即可。input 輸入1個數n 1 n 10 18 output...