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 回答