19 用最快的方法求該數列的第 n 項

2021-06-25 18:18:40 字數 908 閱讀 4556

/*

第 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...