我想将递归代码“转换”为迭代代码。例子是:
public int CalcTime(double AnnualIncome, int Time, double Value)
{
if (AnnualIncome / 12 > Value / Time)
return Time;
else
return CalcTime(AnnualIncome, Time + 1, Value);
}
我试过但不能......
非常感谢!
答案 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);
}
}