斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列: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*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
下面以递归、变量、数组三种方式输出前二十项的值:
public class FibonacciTest {
/**
* 递归实现方式
*
* @param n
* 第n项
* @return 前n项的值
*/
public static int recursion(int n) {
if (n < 2) {
return 1;
} else {
return recursion(n - 1) + recursion(n - 2);
}
}
/**
* 变量实现方式
*
* @param n
* 第n项
*/
public static void variable(int n) {
int a = 1, b = 1, c = 0;
for (int i = 0; i < 20; i++) {
if (i < 2) {
System.out.print("1 ");
} else {
c = a + b;
a = b;
b = c;
System.out.print(c + " ");
}
}
}
/**
* 数组实现方式
*
* @param n
* 第n项
* @return 前n项值的数组
*/
public static int[] array(int n) {
int ary[] = new int[n];
for (int i = 0; i < 20; i++) {
if (i < 2) {
ary[i] = 1;
} else {
ary[i] = ary[i - 1] + ary[i - 2];
}
}
return ary;
}
public static void main(String[] args) {
System.out.print("递归:");
for (int n = 0; n < 20; n++) {
System.out.print(recursion(n) + " ");
}
System.out.println();
System.out.print("变量:");
variable(20);
System.out.println();
System.out.print("数组:");
int ary[] = array(20);
for (int v : ary) {
System.out.print(v + " ");
}
}
}
这道兔子题的实质就是斐波那契数列: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?上面三种实现方式就可以解决这个问题了。