关于斐波那契数列各算法学习--Java

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;



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值