關於動態規划的解釋,見此答案
什么是動態規划?動態規划的意義是什么? - Mingqi的回答 - 知乎 https://www.zhihu.com/question/23995189/answer/305426560
通過動態規划思想用兩種方法計算斐波那契數列
第一種是用遞歸
public static int f(int n){ if(n == 1 | n == 2){ return 1; }else return f(n-1)+f(n-2); }
遞歸的方式缺點非常明顯,會經過非常多次的計算,時間復雜度高,計算f(5)=f(4)+f(3),f(4)=f(3)+f(2),此時左右兩邊都需要計算(3)=f(2)+f(1),浪費了大量的時間。
第二種是用備忘錄法
public static int f(int n){ if(n == 1 | n == 2){ return 1; } else { int[] array = new int[n+1]; array[0]=1; array[1]=1; for (int i = 2; i < n+1; i++) { array[i] = array[i-1] + array[i-2]; } return array[n-1]; } }
用一個數組的方式把斐波那契數列保存下來,從頭計算到尾,消耗了一定的儲存空間,但是節約了重復計算的時間。