演算法筆記2 遞推演算法

2021-10-05 19:21:02 字數 1343 閱讀 4986

演算法特點:

乙個問題的求解需一系列的計算,在已知條件和所求問題之間總存在著某種相互聯絡的關係,在計算時,如果可以找到前後過程之間的數量關係(即遞推式)。那麼,從問題出發逐步推到已知條件,此種方法叫逆推。無論順推還是逆推,其關鍵是要找到遞推式。

例1:

數字三角形。如下所示為乙個數字三角形。請編乙個程式計算從頂到底的某處的一條路徑,使該路徑所經過的數字總和最大。只要求輸出總和。

1、 一步可沿左斜線向下或右斜線向下走;

2、 三角形行數小於等於100;

3、 三角形中的數字為0,1,…,99;

測試資料通過鍵盤逐行輸入,如上例資料應以如下所示格式輸入:57

3 88 1 0

2 7 4 4

4 5 2 6 5

**如下:

#include

using

namespace std;

intmain()

cout<

[1]<

}

例2:

滿足f1=f2=1,fn=fn-1+fn-2的數列稱為斐波那契數列(fibonacci),它的前若干項是1,1,2,3,5,8,13,21,34……求此數 列第n項(n>=3)。

**如下:

非遞迴方法:

#include

using

namespace std;

intsum

(int y,

int b[

100]

)return b[y-1]

;}intmain()

}

遞迴方法:

#include

using

namespace std;

intfbi

(int i)

return

fbi(i-1)

+fbi

(i-2);

}int

main()

}

例3:

樓梯有n級台階,上樓可以一步上一階,也可以一步上二階。

編一遞迴程式,計算共有多少種不同走法?

**如下:

#include

using

namespace std;

intfbi

(int i)

intmain()

}

遞推演算法(2)

有 2n 的乙個長方形方格,用乙個12 的骨牌鋪滿方格 編寫乙個程式,試對給出的任意乙個n n 0 輸出鋪法總數。演算法分析 1 當n 1時,只能是一種鋪法,鋪法總數有示為x1 1。2 當n 2時 骨牌可以兩個並列豎排,也可以並列橫排,再無其他方法,如下左圖所示,因此,鋪法總數表示為x2 2 3 當...

演算法設計與分析2 遞推演算法

遞推法是一種重要的數學方法。這種演算法特點是 乙個問題的求解需一系列的計算,在已知條件和所求問題之間總存在著某種相互聯絡的關係,在計算時,如果可以找到前後過程之間的數量關係 即遞推式 那麼,從問題出發逐步推到已知條件,此種方法叫逆推。無論順推還是逆推,其關鍵是要找到遞推式。遞推演算法的首要問題是得到...

遞推演算法二

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...