不死兔的三種方法


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("]");

}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM