题目描述:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解决方案:
可以考虑用递归,每次都有两种方法去覆盖大矩形,第一种可以竖着覆盖,那么每次覆盖2个矩形,第二种可以横着覆盖,那么每次肯定会覆盖4个矩形,因为上面用横着覆盖,下面的2个矩形肯定得横着放。可以推得表达式:f(n) = f(n-1) + f(n-2)
递归的边界条件为①只剩下最后竖着的2个小矩形,这只会有1种解法,②只剩下横着的4个小矩形,可以有2种解法
0, n<=0;
1, n==1;
2, n==2;
f(n-1) + f(n-2),其他
代码:
import java.util.Scanner;
/*我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。
* 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
*/
public class RectCover {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
int result = rectCover(n);
System.out.println(result);
}
}
public static int rectCover(int target) {
if(target <= 0){
return 0;
}
if(target == 1){
return 1;
}
if(target == 2){
return 2;
}
return rectCover(target-1) + rectCover(target-2);
}
}