一:矩形覆盖
一:题目描述:
我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法?
二:解题思路:
通过题目我们可以发现当n变化是会有以下规律:
n的值 大矩形的数量
n = 1 1
n = 2 2
n = 3 3
n = 4 5
.
.
.
f(n) f(n-1)+f(n-2);
所以通过以上规律可得当n>2之后,f(n) = f(n-1) + f(n-2);
因此可以看出这是斐波那契数列的一种变形
三:代码
/*
我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。
请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法?
*/
/*
思路分析:
n = 1; 1种
n = 2; 2
n = 3; 3
n = 4; 5
f(n) = f(n-1)+f(n-2);(n>2)
*/
public class Demo10_2 {
public static void main(String[] args) {
int n = 4;
int fib = fib(n);
System.out.println(fib);
}
public static int fib(int n){
int fib1 = 1;
int fib2 = 2;
int fib = 0;
for (int i = 2;i<n;i++){
fib = fib1 +fib2;
fib1 = fib2;
fib2 = fib;
}
return fib;
}
}
二:跳台阶
一:题目描述
一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
二:题目分析
当n = 1时:只有一种
n = 2 2种
n = 3 3种
n = 4 5种
f(n) = f(n-1)+f(n-2);
因此这也是斐波那契数列的一种变形,代码与上同!!!