标签:
/*
* 基础解法,按照递归方法求解,该算法的运算时间是指数级增长的
* 这种算法对于相似的子问题进行了重复的计算,因此不是一种高效的算法
*/
public class FibonacciRecursion {
//-----------计算Fibonacci数列值的递归函数--------------
public static int fib(int n){
if(n==1||n==2){//序列中第1,2个数为1
return 1;
}
return fib(n-1)+fib(n-2);
}
public static void main(String[] args) {
int i=6;
System.out.println("fib("+i+"):"+fib(i));
}
}
/*
* 可以通过保存已经算出的子问题的解来避免重复计算
* 即使用动态规划的技术
*/
public class FibonacciDP {
// ----------使用动态规划(DP)求fibonacci数列的值------------
public static int fib(int n) {
int[] array = new int[n];//用来保存动态规划过程中的状态
array[0] = 1;
array[1] = 1;
for (int i = 2; i < n; i++)
array[i] = array[i - 1] + array[i - 2];//动态规划的状态转移式
return array[n-1];
}
public static void main(String[] args) {
System.out.println("fib(6):"+fib(6));
}
}标签:
原文地址:http://blog.csdn.net/hellozpc/article/details/45487955