末尾再帰は常にループに置換できます。その結果、処理が大幅に高速化します。 一部の JVM は末尾呼び出しの最適化を行いますが、行わないものもあります。 そのため、末尾再帰の解決に関わるパフォーマンス特性は仮想マシンによって大きく異なります。
例:
int factorial(int val, int runningVal) {
if (val == 1) {
return runningVal;
} else {
return factorial(val - 1, runningVal * val);
}
}
クイックフィックス適用後:
int factorial(int val, int runningVal) {
while (true) {
if (val == 1) {
return runningVal;
} else {
runningVal = runningVal * val;
val = val - 1;
}
}
}