黑马程序员技术交流社区
标题:
关于斐波那契数列的认识
[打印本页]
作者:
张笨比
时间:
2019-3-8 23:35
标题:
关于斐波那契数列的认识
大家好,在最近的一次习题中接触到一个奇妙的数列,我想介绍一下——“斐波那契数列”:指的是这样一个数列 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
+
","
)
;
}
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2