运行时有什么区别吗?
如果有,那为什么呢?
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编译器也可以做到。
如果有,那为什么呢?
就像在现实生活中一样!当您评估第一种形式时,您必须跳至函数,对其进行计算,然后跳回至调用点:这需要时间,并且机器只不过是您而已。您必须付费。调用函数的成本不是很高,因此对于许多应用程序而言,它对性能没有严重影响。当然,如果您处在可以更改的特定领域,可以将高计算量的任务视为预测,模拟等。
因此,总之,在将调用形式分解成代码之后编写调用表单,从而使代码更具可读性,等等。如果可能的话,让编译器进行优化(编译器现在非常聪明)。我怀疑您是否需要自行优化。