Tail Recursion
末尾再帰とは、再帰呼び出しが関数の最後の操作になる再帰のことである。コンパイラはこれをループに最適化でき、スタックオーバーフローを回避できる。
目的
スタックを消費せずに再帰でループのロジックを表現する。関数型言語の中心的な機能である。
メカニズム
再帰呼び出しが末尾位置(return 直前の最後の操作)にある場合、TCO はこれを呼び出しではなくジャンプに変換し、スタックフレームを再利用する。言語のサポートが必要である(Scheme や SML では必須、JS の strict モードでは仕様上オプションだが、実装しているのは Safari/JavaScriptCore のみ)。末尾再帰でない形はアキュムレータで書き換える必要がある。
ユースケース
- 関数型プログラミング
- スタックオーバーフローの回避
- 再帰コードの最適化