java中著名的Fibonacci数列的实现及Java中的一维数组实现著名的Fibonacci数列。
来源:互联网 发布:java path 编辑:程序博客网 时间:2024/06/05 18:53
1
public static void main(String[] args) { int[] is = f(10); for(int i : is) System.out.println(i); } // 输入长度,得到数组 public static int[] f(int length) { if (length < 2) return null; int[] fs = new int[length]; fs[0] = 1; fs[1] = 1; for (int i = 2; i < length; i++) { fs[i] = fs[i-1] + fs[i-2]; } return fs; }
2题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
//这是一个菲波拉契数列问题
public class lianxi01 {public static void main(String[] args) { System.out.println("第1个月的兔子对数: 1"); System.out.println("第2个月的兔子对数: 1"); int f1 = 1, f2 = 1, f, M=24; for(int i=3; i<=M; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.println("第" + i +"个月的兔子对数: "+f2); } } }
生成方法为:
F1=1 (n=1)
F2=1 (n=2)
Fn=Fn-1+Fn-2 (n>=3)
public class Fibonacci {
/*输出斐波那契数*/
public static void printFibonacciNumber(long f1,long f2,int n){//the first number, the second number,the totel fibonacci numbers
for(int i = 1;i <= n;i++){
System.out.print(f1+" "+f2+" ");//先输出前两个数
if(i % 5 == 0)System.out.print("\n"); //换行
f1 = f1+f2; //计算下两个数
f2 = f1+f2;
}
/*后数除前数为黄金分割点*/
System.out.print("\n"+"-------------------------------------"+"\n");
System.out.println((double)f2/f1);//越到后边,后数除前数越接近黄金分割点
}
/*输出斐波那契数组*/
public static void printFibonacciArray(long f1,long f2,int n){//the first number, the second number,the totel fibonacci numbers
long f[] = new long[n];
f[0]=f1;
f[1]=f2;
for(int i =2;i
f[i]=f[i-2]+f[i-1]; //数组的第三个数开始为前两个数的和
}
System.out.println("-------------------------------------"+"\n");
System.out.println(java.util.Arrays.toString(f)); //把数组转化成String输出
}
/**
* main method
* @param args
*/
public static void main(String[] args) {
Fibonacci.printFibonacciNumber(0, 1, 10);//print the 20 advanced fibonacci number
Fibonacci.printFibonacciArray(0, 1, 20);
}
}
输出结果:
0 1 1 2 3 5 8 13 21 34
55 89 144 233 377 610 987 1597 2584 4181
-------------------------------------
1.6180339985218033
-------------------------------------
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]
小知识(摘录):
斐波那契是意大利的数学家。他是一个商人的儿子。儿童时代跟随父亲到了阿尔及利亚,在那里学到了许多阿拉伯的算术和代数知识,从而对数学产生了浓厚的兴趣。
长大以后,因为商业贸易关系,他走遍了许多国家,到过埃及、叙利亚、希腊、西西里和法兰西。每到一处他都留心搜集数学知识。回国后,他把搜集到的算术和代数材料,进行研究、整理,编写成一本书,取名为《算盘之书》,于1202年正式出版。
这本书是欧洲人从亚洲学来的算术和代数知识的整理和总结,它推动了欧洲数学的发展。其中有一道“兔子数目”的问题是这样的:一个人到集市上买了一对小兔子,一个月后,这对小兔子长成一对大兔子。然后这对大兔子每过一个月就可以生一对小兔子,而每对小兔子也都是经过一个月可以长成大兔子,长成大兔后也是每经过一个月就可以生一对小兔子。那么,从此人在市场上买回那对小兔子算起,每个月后,他拥有多少对小兔子和多少对大兔子?
这是一个有趣的问题。当你将小兔子和大兔子的对数算出以后,你将发现这是一个很有规律的数列,而且这个数列与一些自然现象有关。人们为了纪念这位兔子问题的创始人,就把这个数列称为“斐波那契数列”。
又找到了这么一段话:
规律表:
月数 小兔 中兔 老兔 总数
1 1 0 0 1
2 0 1 0 1
3 1 0 1 2
4 1 1 1 3
5 2 1 2 5
6 3 2 3 8
7 5 3 5 13
在计算每一行时,大兔数为上月的大兔数加上月的中兔数,中兔数为上月的小兔数,小兔数为本月的大兔数,算总数为本月的小兔数加本月的中兔数加本月的大兔数。在观察总数的过程中找出了规律:总数的第一、二月都是1,以后的每一月是前两月的和。数列为1,1,2,3,5,8,13,21,34,55,……
当n=50时,后项与前项的比是1.61803398874989,而前项与后项的比是0.61803398874989,即b/a的值与a/b的值相差1,假设后项与前项的比是φ,则有(φ-1)/φ=1,解这个方程得:φ= (√5+1) /2,这就是黄金分割。
当n充分大时,斐波纳契数列后前项的比值,与前后项的比值,相差1,它们的比值是黄金分割!黄金分割是一个十分有用的无理数。据此,把黄金分割可用一个有理数近似表示,如斐波纳契数列的第七项与斐波纳契数列的第六项的比13/8,斐波纳契数列的第九项与斐波纳契数列的第八项的比34/21等都可以近似地表示为黄金分割,当然项数越后越精确。
- java中著名的Fibonacci数列的实现及Java中的一维数组实现著名的Fibonacci数列。
- Fibonacci数列的实现
- Fibonacci数列的实现
- fibonacci数列 java实现
- Fibonacci数列实现的几种方法(java实现)
- Fibonacci数列的非递归实现(Java版)
- 求fibonacci数列第100项的值(Java实现)
- fibonacci数列的不同实现方法对比(java)
- Java代码实现Fibonacci数列
- Fibonacci数列的非递归实现
- Fibonacci数列的递归简单实现
- Fibonacci数列的函数实现总结
- 斐波拉契数列(Fibonacci)的Python实现
- fibonacci数列的递归C++实现
- 竞赛中常见的数列(一):Fibonacci数列
- Fibonacci数列的计算
- fibonacci数列的变形
- fibonacci数列的性质
- Android实现翻页功能原理
- S3C6410的DRAM控制器
- 第十七周任务:采用引用排序
- 字符串大小写字母个数
- S3C6410处理器介绍
- java中著名的Fibonacci数列的实现及Java中的一维数组实现著名的Fibonacci数列。
- LINUX
- poj1287Networking-最小生成树prim
- 安装和配置SVN
- 运用gridview显示xml文件并能增删改查
- 第十七周任务:字符串长度
- DOM中的动态脚本和动态样式
- Javascript 中 null、NaN和undefined的区别
- jsp使用DOM对xml文件进行操作的web小项目