背景
斐波那契数列(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年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
递归方式
/**
* 递归求Fibonacci数列
*
* @param day
* @return
*/
public int fibonacci(int day) {
if (day == 1 || day == 2) {
return 1;
} else {
return fibonacci(day - 1) + fibonacci(day - 2);
}
}
缺点:由于每一次计算都要从第三天计算,重复了很多,时间复杂度也极高,称指数上升,天数越多,耗时越大
非递归求Fibonacci数列
思路:
/**
* 非递归求斐波那契数列
* @param day
* @return
*/
public int fibonacci2(int day) {
int start = 1;
int start1 = 1;
int temp = 0;
if (day == 1 || day == 2) {
return 1;
}
for (int i = 2; i < day; i++) {
temp = start + start1;
start1 = start;
start = temp;
}
return temp;
}
时间复杂度为O(n);