コンテンツへスキップ
uencoder

Tail Recursion

末尾再帰とは、再帰呼び出しが関数の最後の操作になる再帰のことである。コンパイラはこれをループに最適化でき、スタックオーバーフローを回避できる。

目的

スタックを消費せずに再帰でループのロジックを表現する。関数型言語の中心的な機能である。

メカニズム

再帰呼び出しが末尾位置(return 直前の最後の操作)にある場合、TCO はこれを呼び出しではなくジャンプに変換し、スタックフレームを再利用する。言語のサポートが必要である(Scheme や SML では必須、JS の strict モードでは仕様上オプションだが、実装しているのは Safari/JavaScriptCore のみ)。末尾再帰でない形はアキュムレータで書き換える必要がある。

ユースケース

  • 関数型プログラミング
  • スタックオーバーフローの回避
  • 再帰コードの最適化

関連用語

References