一:矩形覆蓋
一:題目描述:
我們可以用 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);
因此這也是斐波那契數列的一種變形,代碼與上同!!!