/**
*
* desc: 递归,效率最低
*
* @param n
* @return
*/
public static long getFeiBoNaQieV1(int n) {
if (n <= 2) {
return 1;
}
return getFeiBoNaQieV1(n - 2) + getFeiBoNaQieV1(n - 1);
}
/**
*
* desc: 三参数,保存中间过程 a=b+c b赋值给a c赋值给b
*
* @param n
* @return
*/
public static long getFeiBoNaQieV2(int n) {
if (n <= 2) {
return 1;
}
int c = 0;
int a = 1;
int b = 1;
for (int i = 3; i <= n; i++) {
c = a + b;
// a b c
a = b;
b = c;
}
return c;
}
/**
*
* desc: 用数组保存中间过程,用BigInteger计算,扩大求值范围
*
* @param n
* @return
*/
public static String getFeiBoNaQieV3(int n) {
if (n <= 2) {
return "1";
}
BigInteger[] array = new BigInteger[n+1];
array[1] = new BigInteger("1");
array[2] = new BigInteger("1");
for (int i = 3; i <= n; i++) {
array[i] = array[i-2].add(array[i-1]);
// 数列第n个数,对应数组array[n-1] 因为数组下标是从0开始的
array[n-1] = array[i];
}
return array[n].toString();
}
/**
*
* desc: 公式法
*
* @param n
* @return
*/
public static long getFeiBoNaQieV4(int n) {
double sqrt5 = Math.sqrt(5);
double temp = Math.pow((1+sqrt5)/2, n) - Math.pow((1-sqrt5)/2, n);
return (long)(temp/sqrt5);
}
算法攻克-01-递归-01斐波那契数列
最新推荐文章于 2024-07-14 19:56:17 发布