大家都知道,如果乙個問題的求解可以通過求解子問題來求解,那麼這種問題就可以用遞迴的思路去求解。遞迴的好處,**簡單易懂,但同時也有個致命的缺點,時間複雜度高,如果n很大的情況下,通常是無法在規定時間內算出問題的答案的。通過斐波那契數列,來學習一些這個問題。
1,斐波那契數列的表示式:
fibonacci數列簡介:
f(1)=1
f(2)=1
f(n)=f(n-1)+f(n-2) (n>2)
(1)斐波那契數列的遞迴演算法思想描述:利用遞迴思想,每次計算當前的值時候,就要引用之前的兩個值,一步一步的遞迴,一直到最起始處,才能用到f(1)和f(2)。
遞迴演算法程式:
int recursive_method(int n)
(2)遞迴演算法呼叫的順序舉例子
在遞迴呼叫過程中fib(3)被計算了2次,fib(2)被計算了3次。fib(1)被呼叫了5次,fib(0)中被呼叫了3次。所以,遞迴的效率低下,但優點是**簡單,容易理解。
(3)遞迴演算法時間複雜度為:o(2^(n/2))<=t(n)<=o(2^n)。
2,斐波那契的非遞迴演算法
int non_recursive_method(int n)
return a3;
} }
非遞迴演算法時間複雜度為:o(n)。 遞迴演算法時間複雜度分析
一般情況下,演算法中基本操作重複的次數就是問題規模n的某個函式f n 進而分析f n 隨n的變化情況並確定t n 的數量級。這裡用 o 來表示數量級,給出演算法時間複雜度。t n o f n 它表示隨問題規模n的增大,演算法的執行時間增長率和f n 增長率成正比,這稱作演算法的漸進時間複雜度。而我們...
遞迴演算法的時間複雜度分析
在演算法分析中,當乙個演算法中包含遞迴呼叫時,其時間複雜度的分析會轉化為乙個遞迴方程求解。實際上,這個問題是數學上求解漸近階的問題,而遞迴方程的形式多種多樣,其求解方法也是不一而足,比較常用的有以下四種方法 1 代入法 substitution method 代入法的基本步驟是先推測遞迴方程的顯式解...
遞迴演算法的時間複雜度分析
在演算法分析中,當乙個演算法中包含遞迴呼叫時,其時間複雜度的分析會轉化為乙個遞迴方程求解。實際上,這個問題是數學上求解漸近階的問題,而遞迴方程的形式多種多樣,其求解方法也是不一而足,比較常用的有以下四種方法 1 代入法 substitution method 代入法的基本步驟是先推測遞迴方程的顯式解...