1、斐波那契数列百度百科定义是:
斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=1,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)
2、斐波那契数列Java代码实现:
(1)最基本递归实现:
public class Fibonacci{
public static long computerRecursively(int n){
if(n > 1)
return computerRecursively(n-2) + computerRecursively( n - 1);
return n;
}
}
但此方法运行效率非常慢,每次都要重新调用去计算结果,非常耗内存;为此可以用优化的方法。
(2)优化的斐波那契数列
public class Fibonacci{
public static long computerRecursively(int n){
if(n > 1){
long result = 1;
do{
return result += computerRecursively( n - 2);
n--;
}while (n > 1);
return result;
}
return n;
}
}
这种将上一次的结果保存起来,而不用每次去重新计算,减少了计算机内存的调用。但不用递归或许会减少更多的内存消耗。
(3)从递归到迭代
public class Fibonacci{
public static long computerRecursively(int n){
if(n > 1){
long a = 0, b = 1;
do{
long temp = b;
a += b;
a = temp;
}while(--n > 1);
return b;
}
return n;
}
}
利用迭代方法,复杂性大大降低,因为它是线性的,性能也更好,但还可以再优化。
(4)优化的迭代
public class Fibonacci{
public static long computerRecursively(int n){
if(n > 1){
long a, b = 1;
n--;
a = n & 1;
n /= 2;
while(n-- > 0){
a += b;
b += a;
}
return b;
}
return n;
}
}
因为(3)中的迭代次数可能是奇数,这时需要对a\b的值进行改进,如果n为奇数,则a = 0, b = 1; 如果n为偶数,则a = 1, b = 1;