0

再帰コードを反復コードに「変換」したい。例は次のとおりです。

 public int CalcTime(double AnnualIncome, int Time, double Value)
 {
     if (AnnualIncome / 12 > Value / Time) 
         return Time;
     else
         return CalcTime(AnnualIncome, Time + 1, Value);
 }

やってみたけどできなかった…

どうもありがとうございました!

4

2 に答える 2

6

これを試して:

public int CalcTime(double AnnualIncome, int Time, double Value)
{
    while (AnnualIncome / 12 <= Value / Time) 
    {
        Time++;
    }
    return Time;
}

また、上記のコメントで @CodesInChaos が指摘しているように、ベスト プラクティスでは小文字の変数名が指示されます。

public int CalcTime(double annualIncome, int time, double value)
{
    while (annualIncome / 12 <= value / time) 
    {
        time++;
    }
    return time;
}
于 2012-11-06T19:50:24.703 に答える
1

再帰から反復への変換は、CPU の自然呼び出しスタックを独自のスタックでエミュレートすることによって最も簡単に実行できます。これは、再帰関数で自然に解決される問題に有効です。(これが最も正しいアプローチであると言っているわけではありません)

この場合、次のようになります: (このコードがコンパイルまたは実行されるとは思わないことに注意してください。これは、これを行うべきだと私が信じている方法の例にすぎません)

Stack stack;
int time = 1; 
stack.add(time);

while(!stack.isEmpty)
{
   currentTime = stack.pop();

   if(AnnualIncome / 12 > Value / currentTime )
        return currentTime ;
   else
   {
        stack.push(time+1);
   }
}
于 2012-11-06T19:58:27.017 に答える