算法7:求用小矩形覆蓋大矩形有多少種方式

#矩形覆蓋算法:
#用2*1的小矩形去覆蓋2*n的大矩形,要求無重疊
#求取總共有多少種方法?
#這個大矩形形狀是2*n
#限定了矩形只有兩行
#所以覆蓋方法有兩種覆蓋方式:
#1、先用2*1條塊覆蓋,再覆蓋剩下的2*(n-1)的大矩形;
#2、先用1*2的條塊覆蓋2*2的區域,再去覆蓋2*(n-2)的大矩形。
#據此分析:2*n的大矩形覆蓋方法數=2*(n-1)的次大矩形覆蓋方法數+2*(n-2)的次大矩形覆蓋方法數
#特殊情況:當n=1的時候,2*n的覆蓋方法數是:1;當n=2的時候,2*n的覆蓋方法數是:2


def RectCover(n):
    if n<=2:
        return 2
    nFirstNum = 1
    nSecondNum = 2
    nNow = 0
    for i in range(3,n+1):
        nNow = nFirstNum + nSecondNum
        nFirstNum = nSecondNum
        nSecondNum = nNow
    return nNow


#這裏假設n=1,n=2,n=5三種情況->類似於斐波那契數列
print("n = 1:")
print(RectCover(1))
print("n = 2:")
print(RectCover(2))
print("n = 5:")
print(RectCover(5))


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章