大家好,在最近的一次习题中接触到一个奇妙的数列,我想介绍一下——“斐波那契数列”:指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
自然中的斐波那契数列
这个数列从第3项开始,每一项都等于前两项之和。
斐波那契数列的定义者,是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨。他被人称作“比萨的列昂纳多”。
斐波那契数列中的斐波那契数会经常出现在我们的眼前——比如松果、凤梨、树叶的排列、某些花朵的花瓣数(典型的有向日葵花瓣),蜂巢,蜻蜓翅膀,超越数e(可以推出更多),黄金矩形、黄金分割、等角螺线,十二平均律等。
在java的学习中相信大家都做过不死神兔的练习 :
有一个很有名的数学逻辑题叫做不死神兔问题。有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
参考代码:
public class Test { public static void main(String[] args) {
//为了存储多个月的兔子对数,定义一个数组,用动态初始化完成数组元素的初始化,长度为20 int[] arr = new int[20];
//因为第1个月,第2个月兔子的对数是已知的,都是1,所以数组的第1个元素,第2个元素值也都是1
arr[0] = 1; arr[1] = 1;
//用循环实现计算每个月的兔子对数
for(int x=2; x<arr.length; x++) { arr[x] = arr[x-2] + arr[x-1];}
//输出数组中最后一个元素的值,就是第20个月的兔子对数
System.out.println("第二十个月兔子的对数是:" + arr[19]); }
}
然而我又发现另一个不死神兔题
Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:
「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。
起初只有一只免子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产)......。
这就是著名的不死神兔问题,即Fibonacci数列,一般习惯称之为费氏数列,举例如下: 1、1 、2、3、5、8、13、21、34、55、89......
这个两个题的数组是一样的 为什么题目不一样呢?
我认为是练习题中出错了
一个是第三个月后小兔子生产
一个是第一个月小兔子就生产
以下是我根据上题重新的代码
ublic class FibonacciSequence {
public static int ARRAY_DEFAULT = 20;//定义数列的大小
public static void main(String[] args) {
int[] num = new int[ARRAY_DEFAULT];
for(int i = 0;i < ARRAY_DEFAULT;i++) {
if(i == 0 || i == 1) {
num = 1;
}else {
num = num[i-1] + num[i-2];
}
}
printOut(num);
}
// 打印数组
public static void printOut(int[] num) {
System.out.print("[");
for (int i = 0; i < num.length; i++) {
if (i == num.length - 1) {
System.out.println(num + "]");
} else {
System.out.print(num + ",");
}
}
}
}
|
|