2016-05-15 5 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); 
} 

私が混乱し続けるのは、再帰の中で2回の呼び出しがあり、ループを使用して変換する方法がわかりません。ここで

+0

それが現在の反復のために結果を計算するために、最後の2回の反復からの結果を追跡する、単一のループを完全に可能でなければなりませんように見えます。 – khelwood

+0

詳細を教えてください。 –

+0

OK、回答を投稿 – 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ループで何かをしようとしていましたが、実際には成功しませんでした。私を最も混乱させたのは2つの再帰呼び出しです。これをクリアしていただきありがとうございます! –