public class RabbitTest {
public static void main(String[] args) {
// 方法1
int[] array = new int[20];
// 从第三个月开始,是前两个数的和array[2]=array[1]+array[0]
array[0] = 1;// 已知
array[1] = 1;// 已知
for (int x = 2; x < array.length; x++) {
array[x] = array[x - 1] + array[x - 2];
}
System.out.println("第20个月的兔子对数是:" + array[array.length - 1]);
// 方法2(相邻取值法)
/*
* 假设相邻的兔子对数是x,y 第一个相邻数据: x=1,y=1
* 第二个相邻数据: x=1,y=2 第三个相邻数据: x=2,y=3
* 第四个相邻数据: x=3,y=5 第五个相邻数据: x=5,y=8 .....
* 第x次的x是上一次的y值,第x次的y是上一次的x和y之和
*/
int x = 1;// 已知
int y = 1;// 已知
// 为什么18次循环呢?因为从第二次开始x=1,y=1+1的,少一次,3个数据相邻的次数只有2次,,所以由少一次,所以18次
for (int i = 0; i < 18; i++) {
int tempx = x;// 上一次的x
int tempy = y;// 上一次的y
x = tempy;
y = tempx + tempy;
}
System.out.println("第20个月的兔子对数是:" + y);
// 方法3
//递规方法
System.out.println("第20个月的兔子对数是:" + getSum(20));
}
// 递规实现
// 方法返回值类型int,参数列表int month,出口条件month=1或者month=2,规律前两个月之和
public static int getSum(int month) {
if (month == 1 || month == 2)
return 1;
else
return getSum(month - 1) + getSum(month - 2);
}
}
|