2016-05-15 93 views
1

有沒有辦法將此遞歸算法轉換爲迭代而不使用堆棧?將遞歸函數與更多調用轉換爲迭代函數java

public static float T1(int n, float y) { 
    if (n == 0) 
     return y; 
    if (n == 1) 
     return 1; 

    return 2 * y * T1(n - 1, y) - T1(n - 2, y); 
} 

讓我困惑的是在遞歸中有兩個調用,我不確定如何轉換使用循環。

+0

它看起來應該是完全可能的一個循環,跟蹤最後兩次迭代的結果來計算當前迭代的結果。 – khelwood

+0

請您詳細說明一下嗎? –

+0

好的,發佈了一個答案 – khelwood

回答

2

以下是使用for循環進行相同計算的方法。

public static float T1(int n, float y) { 
    if (n==0) return y; 
    if (n==1) return 1; 
    float p1 = 1, p2 = y; // track the previous two values 
    for (int i=2; i <= n; ++i) { 
     float p = 2*y*p1 - p2; // calculate the result for this iteration 
     p2 = p1; // update the previous values to be used in the next iteration 
     p1 = p; 
    } 
    return p1; 
} 
+0

我試圖做一些while循環,但並不真正成功。最讓我困惑的是兩次遞歸調用。感謝您清理這個! –