遞推演算法是非常常用的演算法思想,在數學計算等場合有著廣泛的應用。遞推演算法適合有明顯公式規律的場合。
遞推演算法基本思想
遞推演算法是一種理性思維莫斯的代表,根據已有的資料和關係,逐步推到而得到結果。遞推演算法的執行過程如下:
(1)根據已知結果和關係,求解中間結果。
(2)判斷是否達到要求,如果沒有達到,則繼續根據已知結果和關係求解中間結果。如果滿足要求,則表示尋找到乙個正確答案。
遞推演算法需要使用者知道答案和問題之間的邏輯關係。在許多數學問題中,都kndbpl有明確的計算公式可以遵循,因此可以採用遞推演算法來實現。
遞推演算法示例
數學裡面的斐波那契數列是乙個使用遞推演算法的經典例子。
13世紀義大利數學家斐波那契的《算盤書》中記載了典型的兔子產仔問題,其大意如下:
如果一對乙個月大的兔子以後每乙個月都可以生一對小兔子,而一對新生的兔子出生兩個月才可以生出小兔子。也就是,1月份出生,3月份開始產仔。那麼假定一年內沒有產生兔子死亡事件,那麼1年之後共有多少對兔子呢?
1.遞迴演算法
我們來分析一下兔子產仔問題。我們先逐月看每月兔子的對數。
第乙個月:1對兔子;
第二個月:1對兔子;
第三個月:2對兔子;
第四個月:3對兔子;
第五個月:5對兔子;
第六個月:8對兔子;
……………www.cppcns.com…
從上面可以看出,從第三個月開始,每個月的兔子總對數等於前兩個月兔子數的總和。相應的計算公式如下:
第n個月兔子總數www.cppcns.comfn=fn-1+fn-2。
這裡初始第乙個月的兔子數f1=1,第二個月的兔子數f2=1。
可以用遞迴公式來求解。為了通用型的方便,我們可以編寫乙個演算法,用於計算斐波那契數列問題,按照這個思慮來編寫相應的兔子產仔問題的求解演算法,示例**如下:
複製** **如下:
/*輸入引數n為經歷的時間(單位是月),程式中通過遞迴呼叫來實現斐波那契數列的計算。
*/ int fib程式設計客棧onacci(n)
else
}else }
遞迴演算法求解兔子產仔問題
有了上述通過的兔子產仔問題演算法後,我們可以求解任意的此類問題。這裡給出完整的兔子產仔問題求解**:
複製** **如下:
#include
using namespace std;
/*輸入引數n為經歷的時間(單位是月),程式中通過遞迴呼叫來實現斐波那契數列的計算。
*/ int fibonacci(int n)
else
}else }
int main()
執行該程式,使用者輸入12,得到如圖結果:
本文標題: c++基本演算法思想之遞推演算法思想
本文位址:
演算法之遞推思想
一 概念 通過已知條件,利用特定關係逐步遞推,最終得到結果為止,核心就是不斷的利用現有資訊推導出新的東西。二 分類 當然遞推中有兩種,順推 和 逆推 順推 從條件推出結果。逆推 從結果推出條件。三 舉例 1 順推的例子 上過大學的應該都知道著名的 斐波那契 數列吧,說的是繁殖兔子的問題,題目我就大概...
遞推演算法二
b align center size medium 遞推演算法二 冪積數列 size align b size medium b 冪積數列 b m 輸入整數n,m求小於n的按從小到大的第m個元素 分析 list b 窮盡法 b 從2開始到n,如果n 2 0,n n 2一直迴圈的直到不能除盡 n 3...
遞推演算法(初學)
遞推演算法 乙個問題的求解需一系列 類似重複 的計算,在已知條件和所求問題之間總存在著某種相互聯絡的關係。通過已知條件,利用特定關係得出中間推論,直至得到結果的演算法。在解決問題的時候,去尋找前後過程之間的數學關係 即遞推式 遞推演算法避開了求項公式的麻煩,把乙個複雜的問題的求解,分解成了連續的若干...