alt

f(n)表示2*n(横为n,竖为2)时的结果。

当最后一列选择竖放时,即为f(n - 1)

当最后一列选择横放时,即为f(n - 2)

所以f(n) = f(n - 1) + f(n - 2),类斐波那契数列,递归式如下:

f(n)={f(n1)+f(n2),n>21,n=12,n=2f(n)=\left\{\begin{matrix} f(n-1) + f(n-2), & n > 2\\ 1, & n=1\\ 2, & n=2 \end{matrix}\right.

alt

与之极其类似的一个题目:15级楼梯,小明每步最大跨3级,上楼梯有多少种方式?
反着考虑f(n),当最后一步跨一级时,就是f(n-1),当最后一步跨二级时,就是f(n-2),当最后一步跨三级时,就是f(n-3)。易得递归式如下:

f(n)={f(n1)+f(n2)+f(n3),n>31,n=12,n=24,n=3f(n)=\left\{\begin{matrix} f(n-1) + f(n-2) + f(n-3), & n > 3\\ 1, & n=1\\ 2, & n=2 \\ 4, & n=3 \end{matrix}\right.
class Solution {
public:
    int rectCover(int n) {
		if (n < 1)
		{
			return 0;
		}
		int a = 1, b = 2;
		while (--n > 0)
		{
			b = a + b;
			a = b - a;
		}
		
		return a;
    }
};