末尾再帰最適化
末尾再帰最適化(まつびさいきさいてきか)とは、賢いコンパイラが末尾再帰を検出すると、最適化時に再帰を展開し、消し去ってくれる機能のことである。
末尾再帰であれば後に続く処理はないので、途中経過を保持する変数と、プログラマーが手で書くとボロクソに言われるgoto文を用いて、再帰を無くす(展開する)ことができる。
末尾再帰最適化はこの末尾再帰の特性を利用し、再帰はリソース馬鹿食いでスタックオーバーフローの危険性があり、何よりクソ重い、かといってプログラマーが手動で再帰を展開しておくと9割方ソースコードがクソ読みにくくなる、という問題をコンパイラによる最適化時に半自動で解決してくれる優れものである。
ただし、末尾再帰最適化が行われるかはコンパイラの気分次第であり、どうなるかわからない諸刃の剣。たとえばC#であれば、マイクロソフト製のコンパイラで、ターゲットがx64、かつリリースビルド(最適化が有効な状態)でのみ末尾再帰最適化が行われる。つまりデフォルトでは最適化が無効となっているデバッグビルド時には末尾最適化が行われないという。
関連項目
参考文献