斐波那契數列求解的優化

2021-07-08 14:03:15 字數 1330 閱讀 1317

題目:給定整數n,返回斐波那契數列的第n項。

解法一:暴力遞迴,時間複雜度為o(2^n)

int fun(int n)

else if(n ==1 || n ==2)

return fun(n-1) + fun(n-2);

}

解法二:儲存前面求出的值,時間複雜度為o(n)

int fun(int n)

else if(n ==1 || n ==2)

else

return result;}}

解法三:採用矩陣乘法,把時間複雜度降為o(logn)

遞迴優化的通用公式如下:

/* 矩陣的乘法,m1,m2是兩個矩陣,結果為result */

int mulmatrix(vector> m1, vector> m2, vector> &result)

for(i = 0; i < m2[0].size(); i++)//result的行標}}

return 0;

}/* 求m矩陣的n次方 */

int matrixpower(vector> m, int p, vector> &result)

for(; p != 0; p >>= 1)

tempp = temp;

mulmatrix(tempp,tempp,temp);

}}/* 求斐波那契數列第n項 */

int fun(int n)

else if (n == 1 || n == 2)

/* 構建矩陣 */

vector> base(2);

base[0].push_back(1);

base[0].push_back(1);

base[1].push_back(1);

base[1].push_back(0);

vector>res(2);

res[0].push_back(0);

res[0].push_back(0);

res[1].push_back(0);

res[1].push_back(0);

matrixpower(base,n-2,res);

return res[0][0] + res[1][0];

}int main( void )

斐波那契數列求解

斐波那契數列是一種常見的數列,其滿足下面兩個條件 f0 f1 1 fn fn 1 fn 2 斐波那契數列求解def fib1 n if n 2 return 1 return fib1 n 1 fib1 n 2 不適用遞迴 python def fib2 n f1 f2 1 for i in ran...

Matlab求解斐波那契數列

下面是乙個matlab的指令碼函式,用於求解菲波那切數列,而且可以判斷輸入是否符合實際情況 function fibona n 斐波那契數列,前兩項之和等於第三項 f n f n 1 f n 2 第一項和第二項分別都是1 f 1 1,f 2 1 程式主題 if n 3 disp n warning ...

10 求解斐波那契數列

寫乙個函式,輸入 n 求斐波那契 fibonacci 數列的第 n 項。斐波那契數列的定義如下 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.斐波那契數列由 0 和 1 開始,之後的斐波那契數就是由之前的兩數相加而得出。答案需要取模 1e9 7 1000000007 如計算初...