遞推演算法(初學)

2021-09-14 04:08:32 字數 2582 閱讀 3566

遞推演算法

乙個問題的求解需一系列(類似重複)的計算,在已知條件和所求問題之間總存在著某種相互聯絡的關係。通過已知條件,利用特定關係得出中間推論,直至得到結果的演算法。

在解決問題的時候,去尋找前後過程之間的數學關係(即遞推式)。

遞推演算法避開了求項公式的麻煩,把乙個複雜的問題的求解,分解成了連續的若干步簡單運算。

遞推演算法分為順推和逆推兩種。

小問題:

1.樓梯有n個台階,上樓可以選擇一下上乙個或兩個台階。

問:一共有多少種上樓的方法?

解: 設:爬x個台階有f(x)種方法

如今有n個台階,方法種類:f(n)

第一步:

選擇邁一步:還剩n-1個台階,那麼此時有f(n-1)種方法

選擇邁兩步,還剩n-2個台階,那麼此時有f(n-2)種方法

可得:n個台階時:f(n)=f(n-1)+f(n-2) 以此類推

那麼就得到遞推式了,注意邊界情況:f(1)=1,f(2)=2

得到遞推式時,要注意n的取值範圍。此時n >= 3。

2.現有一對雌雄各一的兔子,雌兔在出生兩個月後才能生育,且每月產雌雄各一的一對兔子。

問:n個月後共有多少只兔子?

解:設:(x,y)為未成年的兔子,(x,y)為成年的兔子。

第x個月的兔子數為f(x)  x>0  f(1)==1
f(2)==1

第一月:( x1,y1 )

第二月:( x1,y1 ) //第一對兔子成年

第三月:( x1,y1 )->( x2,y2 ) //出生第二對兔子

第四月:( x1,y1 )->( x3,y3 ) ( x2,y2 )

第五月: ( x1,y1 )->( x4,y4 ) ( x3,y3 ) ( x2,y2 ) ->(

x5,y5 )

第六月: ( x1,y1 )->( x6,y6 ) ( x2,y2 )->( x7,y7

)( x3,y3)->( x8,y8 ) ( x4,y4 ) ( x5,y5 )

可得規律:

每乙個月的兔子數=老兔子數+新兔子;

=上個月的兔子數+新兔子數;

=上個月的兔子數+上上月的兔子數;

所以:f(n)=f(n-1)+f(n-2);

再考慮n的取值範圍和邊界情況: n>=3

f(1)==1 f(2)==1

3.先有一條2n的過道,用12規格的瓷磚鋪路。

問:有多少種鋪法?

解: 第一步:設未知量

設:長度為x的過道有f(x)種鋪法。
第二步:老規矩(找規律)

當n=1時:f(1)==1;

當n=2時:f(2)==2;

當n=3時:f(3)==3;

當n=n時:

鋪第一塊磚時,是橫鋪還是豎鋪?
豎著鋪時:鋪完第一塊還有n-1塊,那麼還有f(n-1)種情況

橫著鋪時:鋪完第一塊那麼可以間接確定第二塊也是橫著鋪著的,只需再考慮f(n-2)種情況。

第三部:

得遞推式:f(n)=f(n-1)+f(n-2);

再加上取值範圍和邊界情況即可。

**區:

#include

using

namespace std;

intmain()

return0;

}

//這個程式顯示從1到n每個情況的鋪路方法數。

例題:輸入:x,y,z。0<=x<=20,1<=y<=20,x<=z<=50.

輸出:z個月後的成蟲數。

開始只有一對成蟲,每對成蟲x個月產y對卵,每對卵要過兩個月長成成蟲。本體中成蟲不死,卵長成成蟲後的第乙個月不產卵(過x個月產卵)

問:過z個月後,共有成蟲多少對?

分析: n代表成蟲,n代表幼蟲

第乙個月: n1

第x個月: n1

第x+1個月: n1 —> n(2—y+1)

第x+3個月: n1 --> n(2—y+1)

第2x+1個月: n1 --> n(y+2—2y+1) n(2—y+1)

第2x+3個月: n1—>n(2y+2—3*y+1)

n(2---y+1)-->(3*y+2---(3+y)*y+1)

n(y+2---2*y+1)

設第x個月的成蟲數f(x) f(1)到f(z+2)都是1

且f(x+3)==1+y;

成蟲數=上上月的幼蟲數+上個月的成蟲數;

=z+2個月前的成蟲數*y+上個月的成蟲數;
f(n)=f(n-1)+f(n-z+2)

**區:

#include

using

namespace std;

intmain()

for(month=x+

1;month<=z+1;

++month)

cout<

}

總結:1.設f(x)2.找規律(順推或逆推)

3.得到遞推式+邊界情況+x的取值範圍

遞推演算法二

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

遞推演算法(2)

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

遞推演算法 骨牌填充

題目 在2 n的乙個長方形方格中,用乙個2 1的骨牌鋪滿方格,例如n 3時,為2 3方格,骨牌的鋪放方案有三種 如圖 求 輸入n,輸出鋪放方案的總數 分析 可以把2 1的骨牌看成乙個整體,可以豎著放,也可以橫著放。2 n 的骨牌的填充 1 可以由2 n 1 的骨牌最後加上一張豎2 1的骨牌,此時的填...