算法學習之遞歸算法

      軟件開發過程中,函數調用函數自身的運算方式歸納爲遞歸。通常是一個主要問題分解爲多個相似小問題去解決,計算過程是循環調用自身,直到達到臨界條件,返回退出。

      編寫遞歸函數時,必須指定一個函數執行可到達的邊界,當函數達到這個邊界,停止遞歸。因此每個遞歸函數有兩部分組成:遞歸條件和基線條件。遞歸條件是函數調用自己,基線條件就是函數可到到達的邊界,停止調用自身。如果函數指定一個不可到達的基線條件,則會無限循環下去。調用下一次函數時,當前函數暫停並處於未完成狀態,該函數的所有變量值都還保存在內存中,應用會頻繁的調用函數,分配內存空間,直到內存溢出系統卡死,這種情況是最可怕的。

      Java代碼demo:

    static long fibonacciSequence(long num) {
        //遞歸
        if ((num == 1) || (num == 0)) {
            return num;
        }
        return fibonacciSequence(num - 1) + fibonacciSequence(num - 2);
    }

以上是著名的斐波納挈數列。它指的是這樣一個數列:0,1,1,2,3,5,8,13......從這組數可以很明顯看出這樣一個規律:從第三個數開始,後邊一個數一定是在其之前兩個數的和。使用遞歸的話,代碼簡潔易懂。

注意:java使用遞歸要考慮。內存棧的影響,這裏不在介紹。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章