递归或循环

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)

现在我非常自豪我创建了一个递归方法,但我知道这可以通过循环解决.

我的问题是:递归或循环解决这些问题会更好吗?

如果你有时间解释你的答案,请

Ani*_*han 6

一般的递归

通常,递归会更昂贵,因为每次函数递归时都必须使用变量副本修改堆栈.

需要保存一组地址和状态,以便递归过程可以在该特定运行之后返回到正确的状态.

如果可能,迭代会更好.递归,当迭代不会削减它,或将导致更复杂的代码.


代码维护

从维护的角度来看,调试迭代代码比递归过程容易得多,因为与思考特定递归相比,在任何特定迭代中相对容易理解状态是什么.


你的代码

该过程调用自身,但每次运行与上一次运行的结果无关.每次运行都是独立的,通常是最大的赠品,可能没有必要进行递归.

在我看来,calculateAverage(hour + 1);应该移到函数之外,因为读取代码的人也会更清楚.每次通话都是独立的.

  • @giorashc它们比递归更复杂,因为递归可以更好地解决实际问题.当然情况并非如此,因此迭代看起来更清晰.例如,radix-2 FFT使用递归比迭代更容易编写和读取. (3认同)