求解一個數n的階乘(遞歸求解 與 循環求解)


   輸入一個數n,計算其階乘的結果:value = 1*2*3*4......*(n-1)*n。

循環求解:(是很好理解的)

 private static int facyorialValue(int n) {
        int value = 1;
        for (int i = 1; i <= n; i++) {
            value = value * i;
        }
        return value;
    }

 其時間復雜度是O(N),空間復雜度是S(1)。#無論規模n是幾,開辟的空間數是固定的#

遞歸求解:

private static int facyorialValue(int n) {
        if(n == 1){
            return 1;  //遞歸終止的條件
        }else {
            return facyorialValue(n-1) * n;
        }
    }

       遞歸的求解思想就是要求 n 的階乘,只要知道前 (n-1) 項階乘的結果,再與n相乘即可。其時間復雜度是O(N),空間復雜度是S(N)。涉及到遞歸棧的調用,如果遞歸結束條件不恰當,會造成棧溢出。

從代碼的角度分析:(遞與歸的過程)

      循環的調用自己,直到遇到確切的返回值,並且將最終的結果返回。

 

 

       兩種方法的都是可以的,但是更推薦使用循環求解,遞歸會有棧的內存的分配,會是一種資源的消耗。

 


免責聲明!

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



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