不死兔的三种方法

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

}

}

原文地址:https://www.cnblogs.com/nyfz/p/8533738.html