「末尾再帰」を編集中
ナビゲーションに移動
検索に移動
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
'''末尾再帰'''(読み:まつびさいき、[[英語]]:tail recursive)とは、ある[[関数]]の最後の1行(return直前)に[[再帰]]を記述する[[プログラミング]]のテクニックである。 | '''末尾再帰'''(読み:まつびさいき、[[英語]]:tail recursive)とは、ある[[関数]]の最後の1行(return直前)に[[再帰]]を記述する[[プログラミング]]のテクニックである。 | ||
+ | |||
+ | 賢い[[コンパイラ]]だと[[最適化]]の際にこの末尾再帰を検出すると自動的に「[[再帰]]を[[再帰]]ではない形式に展開」してくれる。これを[[末尾再帰最適化]]といい、[[スタック]]を食いつぶすなどの[[再帰]]のデメリットを[[プログラマ]]と[[コンパイラ]]の[[コラボレーション]]で解決してくれる。 | ||
「関数の終わりの一行」ではなく「return直前の再帰処理」が末尾再帰である。ifとelseで分岐しても両方がreturnで終わるなら末尾再帰に該当する。 | 「関数の終わりの一行」ではなく「return直前の再帰処理」が末尾再帰である。ifとelseで分岐しても両方がreturnで終わるなら末尾再帰に該当する。 | ||
11行目: | 13行目: | ||
</source> | </source> | ||
− | |||
=== 例 === | === 例 === |