我想将递归代码“转换”为迭代代码。例子是:
public int CalcTime(double AnnualIncome, int Time, double Value)
{
if (AnnualIncome / 12 > Value / Time)
return Time;
else
return CalcTime(AnnualIncome, Time + 1, Value);
}
我试过但不能...
非常感谢!
我想将递归代码“转换”为迭代代码。例子是:
public int CalcTime(double AnnualIncome, int Time, double Value)
{
if (AnnualIncome / 12 > Value / Time)
return Time;
else
return CalcTime(AnnualIncome, Time + 1, Value);
}
我试过但不能...
非常感谢!
尝试这个:
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;
}
通过使用您自己的堆栈模拟 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);
}
}