package cn.itcast_02;
/*
* 有一對兔子,從出生后的第3個月起每個月都生一對兔子,小兔子長到第3個月后每個月又生一對兔子,假如兔子不死,問第20個月第兔子對數為多少?
* 分析:
* 兔子對數
* 第一個月: 1
* 第二個月: 1
* 第三個月: 2
* 第四個月: 3
* 第五個月: 5
* 第六個月: 8
*
* 由此可見兔子的對象是:
* 1,2,2,3,5,8
* 規則:
* 1.從第三項開始每項是前兩項之和
* 2.而且前兩項是必須對
*
* 實現方法:
* 1.數組
* 2.變量的變化實現
*
* 假如相鄰的兩個月的兔子對數是a,b
* 第一個相鄰的數據:a=1,b=1;
* 第一個相鄰的數據:a=1,b=2;
* 第一個相鄰的數據:a=2,b=3;
* 第一個相鄰的數據:a=3,b=5;
* 看到結果:下一次a是以前的b,下一次b是a+b的和
*
*/
public class DiGuiDemo2 {
public static void main(String[] args) {
//===================數組實現=================
int[] arr = new int[20];
for(int w=0;w<arr.length;w++) {
if(w<2) {
arr[w]=1;
}else {
arr[w] =arr[w-1]+arr[w-2];
}
}
DiGuiDemo2 d=new DiGuiDemo2();
d.arrSs(arr);
//================變量的變化實現====================
int c=1,f=1;
int tem =0;
for(int i=0;i<18;i++) {
tem=c;
c=f;
f=tem+c;
System.out.println(f);
}
//================遞歸實現====================
/*
* 方法:返回值類型:int; 參數列表:int st; 出口條件:第一個月是1,第二個月是1; 規律:從第三個月開始,每一個月是前兩個月之和
*/
System.out.println(fid(20));
}
public static int fid(int st) {
if(st == 1 || st == 2) {
return 1;
}else {
return fid(st-1)+fid(st-2);
}
}
public void arrSs(int[] arr) {
System.out.print("[");
for(int a=0;a<arr.length;a++) {
if(a==arr.length-1) {
System.out.print(arr[a]);
}else {
System.out.print(arr[a]+",");
}
}
System.out.print("]");
}
}
