咱们能够用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); } }