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