走台階問題

2021-06-18 15:59:42 字數 1363 閱讀 7029

**:

舉個例子,假設有3個台階,則有三種走法:分別是,1-1-1, 1-2, 2-1。

很簡單的一道題,學過組合數學的人很快就能想到,這是乙個遞推關係。假設走完k個台階有f(k)種走法。

於是有如下公式

//遞迴演算法
int

count(unsigned

intn)

//非遞迴演算法
int count(unsigned int n)

if (n == 2)

int ret = 0;

for(int i = 2; i

return b;//return ret也是可以的,看你怎麼理解

}

上面只給出了有多少種走法,那麼具體每一種走法是怎麼走的呢?比如n=4時,五種走法分別如下:

1,1,1,1

1,1,2

1,2,1

2,1,1

2,2我們用乙個整型陣列來存放每一步的內容,1表示這步走了乙個台階,2表示這步走了兩個台階。回溯法搞定。**如下。

void

count(

intn,

intt)}}

與此題類似的問題有很多,比如鋪地磚問題,自然數拆分等。

有乙個長度為n,寬度為2的地面,有若干塊長為2,寬為1的地磚,請問用此地磚鋪完這個地面共有多少種方法?

分析一下,假設鋪完長度為n的地面有f(n)種方法,如果第一塊地磚豎起來鋪,還剩下長度為n-1的地面,有f(n-1)種方法。如下圖。

如果第一塊地轉橫著鋪,那麼還剩下長度為n-2的地面,有f(n-2)種鋪法(#add,橫磚下面的2格也只能放個橫磚,擺法已經固定)。如下圖。

所以這道題與上面的題解法完全一樣。不同的題目,相同的模型而已。

給定乙個自然數n,將其拆分為若干個自然數字之和,請問有多少種方法?舉個例子,n=4時,可以拆分為1-1-1-1,1-1-2,1-3,2-2。

這題和上面的題很像,不過上面的問題是排列問題,而這題是組合問題,比如n=4時,1-1-2,1-2-1,2-1-1這三種只能算乙個拆分。在上面的基礎上,去掉重複的組合即可。

走台階問題

舉個例子,假設有3個台階,則有三種走法 分別是,1 1 1,1 2,2 1。很簡單的一道題,學過組合數學的人很快就能想到,這是乙個遞推關係。假設走完k個台階有f k 種走法。於是有如下公式 上面只給出了有多少種走法,那麼具體每一種走法是怎麼走的呢?比如n 4時,五種走法分別如下 1,1,1,1 1,...

走台階問題

舉個例子,假設有3個台階,則有三種走法 分別是,1 1 1,1 2,2 1。很簡單的一道題,學過組合數學的人很快就能想到,這是乙個遞推關係。假設走完k個台階有f k 種走法。於是有如下公式 上面只給出了有多少種走法,那麼具體每一種走法是怎麼走的呢?比如n 4時,五種走法分別如下 1,1,1,1 1,...

走台階問題

舉個例子,假設有3個台階,則有三種走法 分別是,1 1 1,1 2,2 1。很簡單的一道題,學過組合數學的人很快就能想到,這是乙個遞推關係。假設走完k個台階有f k 種走法。於是有如下公式 上面只給出了有多少種走法,那麼具體每一種走法是怎麼走的呢?比如n 4時,五種走法分別如下 1,1,1,1 1,...