java算法-遞歸算法思想

    遞歸算法是跟常見的算法思想。使用遞歸算法,每每能夠簡化代碼編寫,提升程序的可讀性。可是,不適合的遞歸每每致使程序的執行效率變低。java

1、遞歸算法基本思想

    遞歸算法即在程序中不斷反覆調用自身來叨叨求解問題的方法。此處的重點是調用自身,這就要求待求解的問題可以分解爲相同問題的一個子問題。這樣,經過屢次遞歸調用,即可以完成求解。算法

    在遞歸方法中,主調方法又是被調方法。執行遞歸方法將反覆調用其自身。每調用一次就進入新的一層。方法的遞歸調用分爲兩種狀況分別爲:人工智能

  • 直接遞歸:即在方法中調用方法自己.
  • 間接遞歸:即間接的調用一個方法,如func_a調用func_b,func_b又調用func_a間接遞歸用得很少.

    編寫遞歸方法時,必須使用if語句強制方法在未執行遞歸調用前返回。若是不這樣作,在調用方法後,他將永遠不會返回。這是一個很容易犯的錯誤。spa

2、遞歸優缺點

    一、優勢

        在方法中使用遞歸的好處有:程序代碼更簡潔清晰可讀性更好。有的算法用遞歸表示要比用循環表示簡潔精煉,並且某些問題,特別是與人工智能有關的問題,更適宜用遞歸方法,如八皇后問題、漢諾塔問題等。有的算法,用遞歸能實現,並且循環不必定能實現code

    二、缺點

        大部分遞歸例程沒有明顯的減小代碼規模和節省內存空間。遞歸形式比非遞歸形式運行速度要慢一些。這是由於附加的方法調用增長了時間開銷,例如須要執行一系列的壓棧出棧等操做。但在許多狀況下,速度的差異不太明顯。若是遞歸層次太深,還可能致使堆棧溢出遞歸

3、遞歸算法實例

    遞歸算法經常使用於一些數據計算,或者有明顯的遞推性質問題。理解遞歸最經常使用的一個例子是編寫程序求階乘問題。內存

    階乘就是一個正整數的階乘是全部小於及等於該數的正整數,而且0的階乘爲1。it

  • 五的階乘就是:5*4*3*2*1
  • 十的階乘就是:10*9*8*7*6*5*4*3*2*1
public class algorithm {
    /**
     * 遞歸算法階乘
     */
    public static int fact(int i){
        if (i<=1){
            return 1;
        }else {
            return i*fact(i-1);
        }
    }
    public static void main(String[] args) {
        /**
         * 遞歸算法階乘
         */
        System.out.println(fact(12));
    }
}

效果以下:class

479001600
相關文章
相關標籤/搜索