動態規划思想求解斐波那契數列


關於動態規划的解釋,見此答案

什么是動態規划?動態規划的意義是什么? - 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];
        }
    }

用一個數組的方式把斐波那契數列保存下來,從頭計算到尾,消耗了一定的儲存空間,但是節約了重復計算的時間。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM