第十题 矩形覆盖
题目描述
我们可以用2 * 1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2 * 1的小矩形无重叠地覆盖一个2 * n的大矩形,总共有多少种方法?
分析
考察数学建模能力
这题关键就是要学会分析题目。如果会分析题目就会变得很简单
设用n个2 * 1的小矩形,覆盖2 * n大矩形,有f(n)种方法
1)n=1,方法:1种
2)n=2,方法:2种
。。。。。。
3)n=3,方法:
如果先竖着覆盖,则剩下有f(2)种方法
如果先横着覆盖,则剩下有f(1)种跳法
4)n=4,方法:
如果先竖着覆盖,则剩下有f(3)种方法
如果先横着覆盖,则剩下有f(2)种方法
…
4)n=n,方法:
如果先竖着覆盖,则剩下有f(n-1)种方法
如果先横着覆盖,则剩下有f(n-2)种方法
得出 f(n) =f(n-1)+f(n-2)
可以看出,就是斐波那契数列
还是看图容易理解:
function rectCover(number)
{
// write code here
var arr=[0,1,2],
one=1,
two=2,
sum=0;
if(number<3)return arr[number];
for(var i=3;i<=number;i++){
sum=one+two;
one=two; //保存
two=sum; //保存
}
return sum;
}
知识点:递归
关键点:已经计算过的存起来