題目:給定整數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 如計算初...