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