您的位置:首页 > 其它

用1*3的小矩形去无重叠的覆盖一个20*3的大矩形的方法有多少种?

2018-03-28 10:16 357 查看
思路分析

分析,3* 20的覆盖方法记为f(20),用第一个1*3的小矩形去覆盖最左边的时候有两种可能:横着放或者竖着放。竖着放右边还剩下3*19,横着放,上面两块也必须是横着放,所以还剩下3* 17,因此f(20)=f(19)+f(17),更加一般的情况f(n)=f(n-1)+f(n-3),感觉像是斐波那契数列的变种

代码展示

public class Demo1 {
//递归
public static int Fibonacci(int k) {
if (k == 0) {
return 0;
}
if (k == 1 || k == 2) {
return 1;
}
if (k == 3) {
return 2;
}
return Fibonacci(k - 1) + Fibonacci(k - 3);
}
//非递归,数组
public static int Fibonacci1(int k) {
int [] arr=new int [k+1];
arr[1]=1;
arr[2]=1;
arr[3]=2;
for(int i=4;i<=k;i++) {
arr[i]=arr[i-1]+arr[i-3];
}
return arr[k];
}
public static void main(String[] args) {
System.out.println(Fibonacci1(20));

a3e6
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐