/* * 基础解法,按照递归方法求解,该算法的运算时间是指数级增长的 * 这种算法对于相似的子问题进行了重复的计算,因此不是一种高效的算法 */ 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)); } }
时间: 2024-08-24 04:25:20