funで宣言すると末尾再帰最適化がかかる関数全てを末尾再帰であるとします。行えば、コンパイル結果はforやwhileを使うのと同じになるので、実用性を保ちながら再帰で書くことが可能になります。単純な再帰で書くよりもシンプルに書くことができる場合もあります。今回はKotlinを用いて説明をしていますが、言語やコンパイラによっては末尾最適化を行なってくれるものがあります。末尾の条件に引っかからなかった時に、再帰呼び出しの結果のみを返すのが末尾再帰、再帰呼び出しの結果に何か処理を行なって返すのが通常の再帰と理解しています。※雑実装なので1以下を入れると結果がおかしくなります。後結果が大きくなるのでBigIntegerで計算しています。通常の再帰関数で階乗を実装すると以下のようになると思います。効くように書き直した結果が以下です。n)}前者は再帰呼び出しの結果にnを掛けており、後者は再帰呼び出しの結果のみを返しています。使ってみるここまでの内容をまとめると以下のようになります。通常の実装で10000!を計算しようとすればスタックオーバーフローで落ちますが、末尾最適化を行うことで正常に計算が行えます。通常実装のfactのコメントを外した上でビルドし、Javaにデコンパイルした結果です。fact_tの呼び出しが再帰ではなくなっていることが分かります。qiita.com続きです。(10)はてなブログをはじめよう!wrongwrongwrongwrong163377さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。