2010-11-13 80 views
0

我有一個階乘代碼跟蹤執行的順序在Java中

class FactorialTest { 

    public static void main(String args[]){ 
     System.out.println(factorial(10)); 
    } 

    public static int factorial(int N){ 
     if (N <= 1) return 1; 
     return N*factorial(N-1); 
    } 
} 

而且,利用Trace追根溯源,這是輸出:

alt text

這是否意味着遞歸部分一直做首先,乘法是後來?

回答

0

遞歸必須先完成,因爲它是乘法的一個參數。在遞歸完成之前,甚至會增加什麼?

雖然我不認爲你的跟蹤輸出會告訴你。我只是在閱讀代碼後纔回答。

0

使用尾遞歸實現階乘是可能的,但是在您的代碼中,乘法遵循遞歸調用,因此無法應用尾部cail優化。

0

當然,遞歸調用必須先評估。您正在乘以兩個表達式,其中一個是簡單的值(N),另一個是遞歸調用。如果沒有先打電話並得到結果,您希望如何將其乘以N