1.题目描述
我们可以用2 * 1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2 * 1的小矩形无重叠地覆盖一个2 * n的大矩形,总共有多少种方法?
2.解题思路
依旧是斐波那契数列
f(1) = 1
f(2) = 2
当n=3时,它可以由n=2的情况再覆盖一块得到,也可以由 n=1的情况再覆盖 2 块得到,所以 f(3) = f(1) + f(2),依次往下推,可以得到
f(n) = 1, (n=1)
f(n) = 2, (n=2)
f(n) = f(n-1) + f(n-2), (n>2)
用递归的方法即可实现
3.代码
/**
* 题目描述
* 我们可以用2 * 1的小矩形横着或者竖着去覆盖更大的矩形。
* 请问用n个2 * 1的小矩形无重叠地覆盖一个2 * n的大矩形,总共有多少种方法?
* 分析:
* 可以得到,依然可以用到斐波那数列
*/
public class 矩形覆盖 {
public static int fun(int n){
if( n <= 0 ){
return 0;
}
if( n == 1 || n == 2){
return n;
}
return fun( n - 1 ) + fun( n - 2 );
}
}