import java.math.BigInteger;
import java.util.Arrays;
public class Demo03 {
public static void main(String[] args) {
/*
* 用循环实现不死神兔(斐波那契数列)
故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。
在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔,
再过一个月就能生下一对小兔,并且此后每个月都生一对小兔,一年内没有发生死亡,
问:一对刚出生的兔子,一年内繁殖成多少对兔子?
1 1 2 3 5 8 13 21
规律:从第三个月开始,兔子对数是前两个月之和
出口:第一个月和第二个月的兔子对数都是 1
*/
//求第12个月的兔子对数
// method1();
// 第100个月繁殖多少对兔子?(利用BigInteger完成)
//定义三个BigInteger类型的对象,分别代表: 相邻两月的兔子对数, 比如说:代表第一月和第二月,代表第二月和第三月,代表第三月和第四月,依次类推
//bi3代表的是 这两个月的兔子对数总和
//
//method2();
// 1 1 2 3 5 8 13 21
//用递归求第12项的值
// 规律:从第三个月开始,兔子对数是前两个月之和
//出口:第一个月和第二个月的兔子对数都是 1
System.out.println(getNum(12));
}
//递归的方式实现计算结果
public static int getNum(int month){ //这个month就是要计算的月
//写出口
if (month ==1 || month ==2) {
return 1;
}else {
//写规律
//从第三个月开始,兔子对数是前两个月之和
return getNum(month -1) + getNum(month-2);
}
}
//计算第100个月的兔子对数
public static void method2() {
BigInteger bi1=null, bi2=null, bi3=null;
for (int i = 1; i <= 100; i++) {
if (i==1 || i==2) {
bi1 = new BigInteger("1");
bi2 = new BigInteger("1");
}else {
//能进到这里,说明至少是第三个月了
bi3 = bi1.add(bi2);
bi1 = bi2;
bi2 = bi3;
}
}
System.out.println(bi3);
}
//计算第12个月的兔子对数
public static void method1() {
int[] arr = new int[100];
arr[0] = 1;
arr[1] = 1;
for (int i = 2; i < arr.length; i++) {
//arr[2] = arr[1] + arr[0];
arr[i] = arr[i-1] + arr[i-2];
}
System.out.println(Arrays.toString(arr));
}
}
|
|