有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
问题分析:
题目乍一看并不知道在说什么,不要紧,我们来找规律。
第几个月 | 兔子对数 | 为什么 |
---|---|---|
1 | 1 | 原来有一对兔子,编号a |
2 | 1 | 原来有一对兔子,编号a |
3 | 2 | 第3个月生了一对小兔子,编号b |
4 | 3 | 原来老兔子a继续生小兔子,编号c |
5 | 5 | 编号b的兔子成熟,和老兔子一起生小兔子,编号d、e |
6 | 8 | a、b、c一起生兔子,编号f、g、h |
7 | 13 | a、b、c、d、e一起生兔子,编号i、j、k、l、m |
... | ... | ... |
从表中可以看出,从第三个月开始,当前月兔子对数是前两个月兔子对数的和,所以求当前月兔子对数的核心代码是arr[i] = arr[i - 2] + arr[i - 1];
该题目原型就是著名的斐波那契数列,下面贴出代码并科普斐波那契数列。
完整代码如下 :
public static void main(String[] args) {
int[] arr = new int[20];
arr[0] = 1; // 第一个月兔子的数量,1对
arr[1] = 1; // 第二个月兔子的数量,1对
int sum = 2; // 用于记录兔子总数量,现在初始化为前两个月兔子的总数,2对
for (int i = 2; i < arr.length; i++) {
arr[i] = arr[i - 2] + arr[i - 1];
System.out.println("第" + (i + 1) + "个月兔子对数为:" + arr[i]);
sum += arr[i];
}
System.out.println("兔子总对数:" + sum);
}
斐波那契数列小科普
“斐波那契数列”和分数的发明者,是意大利数学家列昂纳多·斐波那契。1202年,他撰写了《珠算原理》(Liber Abaci)一书。他是第一个研究了印度和阿拉伯数学理论的欧洲人。他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点相当于今日的阿尔及利亚地区,列昂纳多因此得以在一个阿拉伯老师的指导下研究数学。
斐波那契数列(Fibonacci sequence):又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
PS:如有不足或错误,请多多包含并指正。