斐波那契在《算盘书》中提出了一个有趣的兔子问题:
一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子?
我们不妨拿新出生的一对小兔子分析一下:
第一个月小兔子没有繁殖能力,所以还是一对;
两个月后,生下一对小兔总数共有两对;
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对;
package Test01;
/**
* 斐波那契数列之不死神兔 总数
* 分析:
* 第个一月:1对小兔 1
* 二月:1对小兔子长大变成1对大兔子 1
* 三月:1对大兔生了1对小兔 2
* 四月:2大 1小 3
* 五月 :3大 2小 5
* @author LuoJoy
*
*/
public class Test1 {
public static void main(String[] args) {
// demo1();
System.out.println(getNum(8));
}
private static void demo1() {
// 第一种方法使用数组
int[] arr = new int[8];
arr[0] = 1;
arr[1] = 1;
// 从第三个开始,前两个月的兔子加起来等于第三个月
for (int i = 2; i < arr.length; i++) {
arr[i] = arr[i - 2] + arr[i - 1];
}
// 得到第8个月的兔子总数,其实就是数组的最后一个下标所对应的值
System.out.println(arr[arr.length - 1]);
}
// 第二种做法,采用递归,把每一个月的兔子数量作为方法的返回值
public static int getNum(int num) {
if (num == 1 || num == 2) {
return 1;
} else {
return getNum(num - 2) + getNum(num - 1);
}
}
}