f(n)表示2*n(横为n,竖为2)时的结果。
当最后一列选择竖放时,即为f(n - 1)
当最后一列选择横放时,即为f(n - 2)
所以f(n) = f(n - 1) + f(n - 2),类斐波那契数列,递归式如下:
与之极其类似的一个题目:15级楼梯,小明每步最大跨3级,上楼梯有多少种方式?
反着考虑f(n),当最后一步跨一级时,就是f(n-1),当最后一步跨二级时,就是f(n-2),当最后一步跨三级时,就是f(n-3)。易得递归式如下:
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;
}
};