1 介绍
Fibonacci数列,定义如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
计算第n项Fibonacci数值。
2 实现
/**
*
* @author xld
*
*/
public class FibonacciSequence {
private static int memo[];
/**
* 动态规划 从底向上 解决问题
*
* @param n
* @return
*/
public static int feibo(int n) {
memo[0] = 0;
memo[1] = 1;
for (int i = 2; i <= n; i++) {
memo[i] = memo[i - 1] + memo[i - 2];
}
return memo[n];
}
/**
* 记忆话搜索 自顶向下解决问题
*
* @param n
* @return
*/
public static int feibo2(int n) {
if (n == 0)
return 0;
if (n == 1)
return 1;
if (memo[n] == -1)
memo[n] = feibo2(n - 1) + feibo2(n - 2);
return memo[n];
}
/**
* 测试1
*
* @param args
*/
public static void main1(String[] args) {
int n = 100;
memo = new int[n + 1];
long startTime = System.currentTimeMillis();
int ret = feibo(n);
long endTime = System.currentTimeMillis();
System.out.println("斐波那契数列第n个元素为:" + ret);
System.out.println("运行时间" + (endTime - startTime));
}
/**
* 测试2
*
* @param args
*/
public static void main(String[] args) {
int n = 10;
memo = new int[n + 1];
for (int i = 0; i < memo.length; i++)
memo[i] = -1;
long startTime = System.currentTimeMillis();
int ret = feibo2(n);
long endTime = System.currentTimeMillis();
System.out.println("斐波那契数列第n个元素为:" + ret);
System.out.println("运行时间" + (endTime - startTime));
}
}