末尾再帰、つまりメソッドが return を実行する前に自身を最後に呼び出しているメソッド呼び出しを報告します。

末尾再帰は常にループに置換できます。その結果、処理が大幅に高速化します。 一部の 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;
      }
    }
  }