差分

ナビゲーションに移動 検索に移動

末尾再帰

164 バイト追加, 2021年2月9日 (火) 07:39
編集の要約なし
'''末尾再帰'''(読み:まつびさいき、[[英語]]:tail recursive)とは、[[再帰]]のうち、recursive)とは、ある[[関数]]の末尾にのみの最後の1行(return直前)に[[再帰]]を記述する[[プログラミング]]のテクニックである。
賢い[[コンパイラ]]だと[[最適化]]の際にこの末尾再帰を検出すると自動的に「[[再帰]]を[[再帰]]ではない形式に展開」してくれる。これを[[末尾再帰最適化]]といい、[[スタック]]を食いつぶすなどの[[再帰]]のデメリットを[[プログラマ]]と[[コンパイラ]]の[[コラボレーション]]で解決してくれる。 「関数の終わりの一行」ではなく「return直前の再帰処理」が末尾再帰である。ifとelseで分岐しても両方がreturnで終わるなら末尾再帰に該当する。<source lang== 概要 ==csharp>int func() { if (x) return recursive1(); else return recursive2();}末尾再帰は再帰呼び出しが関数の末尾にのみ登場することをいう。</source>
そんな小難しくて面倒なことをして何が嬉しいかというと、賢い[[コンパイラ]]だと[[最適化]]時に末尾再帰を検出すると自動的に[[再帰]]を[[再帰]]ではなく展開してくれる。これを[[末尾再帰最適化]]といい、[[スタック]]を食いつぶすなどの[[再帰]]のデメリットを[[プログラマ]]と[[コンパイラ]]の[[コラボレーション]]で解決してくれる。
=== 例 ===

案内メニュー