运行时有什么区别吗?
如果有,那为什么呢?

int pairSumSequence(int n) {
    int sum = 0;
    for (int i = 0; i <  n; i++){
        sum += pairSum(i, i+1);
    }
    return sum;
}

int pairSum(int a, int b) {
    return a + b;
}




int pairSumSequence(int n) {
    int sum = 0;
    for (int i = 0; i <  n; i++){
        sum += i + (i + 1); //2 * i + 1
    }
    return sum;
}


谢谢!

最佳答案

运行时有什么区别吗?


几乎没有引起注意,这在很大程度上取决于可以进行的优化。编译器可以内联该调用(与您所做的等效的表达式替换它)。甚至JIT编译器也可以做到。


如果有,那为什么呢?


就像在现实生活中一样!当您评估第一种形式时,您必须跳至函数,对其进行计算,然后跳回至调用点:这需要时间,并且机器只不过是您而已。您必须付费。调用函数的成本不是很高,因此对于许多应用程序而言,它对性能没有严重影响。当然,如果您处在可以更改的特定领域,可以将高计算量的任务视为预测,模拟等。

因此,总之,在将调用形式分解成代码之后编写调用表单,从而使代码更具可读性,等等。如果可能的话,让编译器进行优化(编译器现在非常聪明)。我怀疑您是否需要自行优化。

10-04 23:10
查看更多