日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算斐波那契数列

發布時間:2023/12/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算斐波那契数列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • O(n)復雜度方法

  • O(logn)復雜度方法

計算矩陣的n次方,可以先求矩陣的n/2次方,然后再平方即可。

?

1 #include <cassert> 2 3 struct Matrix2By2 4 { 5 Matrix2By2 6 ( 7 long long m00 = 0, 8 long long m01 = 0, 9 long long m10 = 0, 10 long long m11 = 0 11 ) 12 :m_00(m00), m_01(m01), m_10(m10), m_11(m11) 13 { 14 } 15 16 long long m_00; 17 long long m_01; 18 long long m_10; 19 long long m_11; 20 }; 21 22 Matrix2By2 MatrixMultiply 23 ( 24 const Matrix2By2& matrix1, 25 const Matrix2By2& matrix2 26 ) 27 { 28 return Matrix2By2( 29 matrix1.m_00 * matrix2.m_00 + matrix1.m_01 * matrix2.m_10, 30 matrix1.m_00 * matrix2.m_01 + matrix1.m_01 * matrix2.m_11, 31 matrix1.m_10 * matrix2.m_00 + matrix1.m_11 * matrix2.m_10, 32 matrix1.m_10 * matrix2.m_01 + matrix1.m_11 * matrix2.m_11); 33 } 34 35 Matrix2By2 MatrixPower(unsigned int n) 36 { 37 assert(n > 0); 38 39 Matrix2By2 matrix; 40 if (n == 1) 41 { 42 matrix = Matrix2By2(1, 1, 1, 0); 43 } 44 else if (n % 2 == 0) 45 { 46 matrix = MatrixPower(n / 2); 47 matrix = MatrixMultiply(matrix, matrix); 48 } 49 else if (n % 2 == 1) 50 { 51 matrix = MatrixPower((n - 1) / 2); 52 matrix = MatrixMultiply(matrix, matrix); 53 matrix = MatrixMultiply(matrix, Matrix2By2(1, 1, 1, 0)); 54 } 55 56 return matrix; 57 } 58 59 long long Fibonacci_Solution3(unsigned int n) 60 { 61 int result[2] = { 0, 1 }; 62 if (n < 2) 63 return result[n]; 64 65 Matrix2By2 PowerNMinus2 = MatrixPower(n - 1); 66 return PowerNMinus2.m_00; 67 } View Code

?

轉載于:https://www.cnblogs.com/larry-xia/p/10659613.html

總結

以上是生活随笔為你收集整理的计算斐波那契数列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。