【まつびよびだしさいてきか】
末尾呼び出し最適化 とは?
💡 再帰のたびに積み上がる「お皿の山」を、1枚だけ使い回す賢い節約術
📌 このページのポイント
末尾呼び出し最適化って何?名前が長くて難しそう…
略してTCOとも呼ばれるよ。まず「末尾呼び出し」から説明すると、関数の一番最後の処理が「別の関数を呼ぶだけ」のパターンのことだよ。この場合、呼び出し元の情報をメモリに残しておく必要がないから、スタックフレームを使い回せるんだ。
スタックフレームって何なの?
関数を呼ぶたびに、戻り先やローカル変数の情報がメモリに積み上がるんだ。これがスタックフレーム。お皿を重ねるイメージだね。再帰で1万回関数を呼ぶと1万枚のお皿が積まれて、限界を超えるとスタックオーバーフローでクラッシュしてしまうんだよ。
TCOがあるとお皿が積み上がらないの?
どの言語でも使えるの?
📖 おまけ:英語の意味
「Tail Call Optimization」 = 末尾呼び出しの最適化
💬 Tail(末尾)の関数Call(呼び出し)をOptimize(最適化)するという、そのままの名前だよ