Mar*_*sen 4 java recursion loops
我有这个方法来计算一些统计数据:
public void calculateAverage(int hour){
if (hour != 20) {
int data =0;
int times = 0;
for (CallQueue cq : queues) {
data += cq.getCallsByTime().get(hour);
times++;
}
averageData.add((double)data/times);
calculateAverage(hour + 1);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我非常自豪我创建了一个递归方法,但我知道这可以通过循环解决.
我的问题是:递归或循环解决这些问题会更好吗?
如果你有时间解释你的答案,请
通常,递归会更昂贵,因为每次函数递归时都必须使用变量副本修改堆栈.
需要保存一组地址和状态,以便递归过程可以在该特定运行之后返回到正确的状态.
如果可能,迭代会更好.递归,当迭代不会削减它,或将导致更复杂的代码.
从维护的角度来看,调试迭代代码比递归过程容易得多,因为与思考特定递归相比,在任何特定迭代中相对容易理解状态是什么.
该过程调用自身,但每次运行与上一次运行的结果无关.每次运行都是独立的,通常是最大的赠品,可能没有必要进行递归.
在我看来,calculateAverage(hour + 1);应该移到函数之外,因为读取代码的人也会更清楚.每次通话都是独立的.