将递归转换为迭代代码

时间:2012-11-06 19:47:47

标签: c# recursive-query

我想将递归代码“转换”为迭代代码。例子是:

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

我试过但不能......

非常感谢!

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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);
   }
}