使用int或long型计算时,很快就会因为大小超过能存储的位,造成返回负数,所以提供了一个BigDecimal的实现,避免数据溢出。
斐波那契数列定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
//Fibonacci sequence
//递归实现
private static long fibonacci(int n) {
if(n == 0) {
return 0;
}
if(n == 1) {
return 1;
}
return fb(n-1)+fb(n-2);
}
//for循环实现
private static long fibonacci(int n) {
if(n == 0) {
return 0;
}
if(n == 1) {
return 1;
}
//第n-2个元素
long pre2 = 0;
//第n-1个元素
long pre1 = 1;
//fn的值
long fn = 0;
for (int i = 2; i <= n; i++) {
fn = pre2 + pre1;
pre2 = pre1;
pre1 = fn;
}
return fn;
}
//BigDecimal版本的for循环实现,避免long型的溢出问题
private static BigDecimal fbWithBigDecimal(int n) {
if(n == 0) {
return BigDecimal.valueOf(0);
}
if(n == 1) {
return BigDecimal.valueOf(1);
}
BigDecimal pre2 = BigDecimal.valueOf(0);
BigDecimal pre1 = BigDecimal.valueOf(1);
BigDecimal fn = null;
for (int i = 2; i <= n; i++) {
fn = pre2.add(pre1);
pre2 = pre1;
pre1 = fn;
}
return fn;
}
注意:本文归作者所有,未经作者允许,不得转载