13世纪初,欧洲最好的数学家是斐波拉契(Fibonacci,又译菲波拉契);他写了一本叫做《算盘书》的著作,是当时欧洲最好的数学书。书中有许多有趣的数学题,其中最有趣的是下面这个题目:
“如果一对兔子每月能生1对小兔子,而每对小兔在它出生后的第3个月里,又能开始生1对小兔子,假定在不发生死亡的情况下,由1对初生的兔子开始,1年后能繁殖成多少对兔子?”
斐波拉契把推算得到的头几个数摆成一串:
1,1,2,3,5,8……
这串数里隐含著一个规律:从第3个数起,后面的每个数都是它前面那两个数的和。而根据这个规律,只要作一些简单的加法,就能推算出以后各个月兔子的数目了。
按照这个规律推算出来的数,构成了数学史上一个有名的数列。大家都叫它“斐波拉契数列”。这个数列有许多奇特的的性质,例如,从第3个数起,每个数与它后面那个数的比值,都很接近于[url]0.618[/url],正好与大名鼎鼎的“黄金分割律”相吻合。人们还发现,连一些生物的生长规律,在某种假定下也可由这个数列来刻画呢。
Java实现:
“如果一对兔子每月能生1对小兔子,而每对小兔在它出生后的第3个月里,又能开始生1对小兔子,假定在不发生死亡的情况下,由1对初生的兔子开始,1年后能繁殖成多少对兔子?”
斐波拉契把推算得到的头几个数摆成一串:
1,1,2,3,5,8……
这串数里隐含著一个规律:从第3个数起,后面的每个数都是它前面那两个数的和。而根据这个规律,只要作一些简单的加法,就能推算出以后各个月兔子的数目了。
按照这个规律推算出来的数,构成了数学史上一个有名的数列。大家都叫它“斐波拉契数列”。这个数列有许多奇特的的性质,例如,从第3个数起,每个数与它后面那个数的比值,都很接近于[url]0.618[/url],正好与大名鼎鼎的“黄金分割律”相吻合。人们还发现,连一些生物的生长规律,在某种假定下也可由这个数列来刻画呢。
Java实现:
java 代码
- public class Fibonacci {
- /**
- * 基于一般变量方式实现
- */
- void fib() {
- int i = 1, k = 1;
- do {
- i = i + k;
- k = k + i;
- System.out.printf("%d\t%d\t", i, k);
- } while (k <= 32000);
- System.out.println();
- }
- /**
- * 基于数组方式实现
- */
- void fib2() {
- int a[] = new int[20];
- a[0] = a[1] = 1;
- for (int k = 2; k < a.length; k++) {
- a[k] = a[k-1] + a[k-2];
- System.out.printf("%d\t", a[k]);
- }
- System.out.println();
- }
- /**
- * 基于递归的方式实现
- */
- int fib3(int i) {
- if (i < 1) {
- return 0;
- }
- if (i==1||i==2) {
- return 1;
- }
- return fib3(i - 1) + fib3(i - 2);
- }
- }