咱們能夠用2*1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?spa
當n=1時,只能豎着排列,因此f(1)=1code
當n=2時,能夠橫着和豎着兩種排列,因此f(2)=2blog
當排列了n-1塊的時候,在加上第n塊矩形進來時,此時有兩種見解遞歸
1)將第n塊本身單獨排列,那麼此時的排列方法數目就是前面n-1塊矩形排列的方法數目get
2)將第n塊和第n-1塊組合在一塊兒排列,那麼此時的排列方法數目就是前面n-2塊矩形的排列方法數目*(第n塊和第n-1塊兩個矩形能夠排列的方法數目),原本兩個矩形的排列數目有兩種,可是若採起豎排的方式則與見解一重複,因此只有惟一一種排列方式就是橫排class
因此f(n) = f(n-1)+f(n-2)方法
圖形實例im
這裏只附上遞歸版本代碼,非遞歸版本可去看斐波那契數列的那篇博文img
public int RectCover(int target) { if(target==1||target==2||target==0){ return target; }else{ return RectCover(target-1)+RectCover(target-2); } }