メインメニューを開く

差分

末尾再帰最適化

445 バイト追加, 2012年5月28日 (月) 01:25
編集の要約なし
[[末尾呼び出し最適化]]([[Tail Call Optimization]]、[[TCO]])の一種で、[[再帰]]だとその効果が絶大だという話であり、やっていることは同じである。
[[末尾再帰]]であれば後に続く処理はないので、途中経過を保持する([[末尾呼び出し]])であれば後に続く処理はないので、途中経過を保持する[[変数]]と、[[プログラマー]]が手で書くとボロクソに言われる[[goto文]]や[[アセンブリ言語]]のjmp命令などを用いて、[[再帰]]を無くす(展開する)ことができる。
末尾再帰最適化はこの[[末尾再帰]]の特性を利用し、([[末尾呼び出し]])の特性を利用し、[[再帰]](関数呼び出し)は[[リソース]]馬鹿食いで[[スタックオーバーフロー]]の危険性があり、何よりクソ重い、かといって[[プログラマー]]が手動で[[再帰]]を展開しておくと9割方(関数)を展開しておくと9割方[[ソースコード]]がクソ読みにくくなり、偉いプログラマーにボロクソ言われる、という問題を[[ソースコード]]がクソ読みにくくなる、という問題をの書き方を気を付けておくことで[[コンパイラ]]による[[最適化]]時に半自動で解決してくれる優れものである。
== 末尾再帰最適化に対応した主なプログラミング言語 ==
[[末尾再帰最適化]]が行われるかは([[末尾呼び出し最適化]])が行われるかは[[コンパイラ]]の気分次第であり、どうなるかわからない諸刃の剣。の気分次第であり、どうなるかわからない諸刃の剣。実際に末尾呼び出し最適化をサポートしているコンパイラであっても100%発動するとは限らない場合もあるので過信しすぎには注意する必要がある。
=== C# ===
匿名利用者