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);
}
}