末尾再帰なら安心でしょ?って信じてたSwiftコードが落ちた夜 by 吉岡祐樹

iOSDC Japan 2025
LT(5分)

末尾再帰なら安心でしょ?って信じてたSwiftコードが落ちた夜

rikusouda 吉岡祐樹 rikusouda
1

再帰って便利ですよね。関数の最後に再帰呼び出しを置く「末尾再帰」なら、スタックも節約されて、ループと同じくらい効率的に動く。

そんなふうに信じていた時期が、私にもありました。

「末尾再帰なら安心!」と信じて書いたSwiftのコード。動作確認もOK、見た目もスッキリ、ところがある日、ちょっと大きな値を渡しただけでStack Overflowで爆死!
何が起きたのか? 調べてみると、Swiftは末尾再帰の最適化(TCO)を保証していないらしいです!
しかも、見た目的には末尾再帰に見えるのに、ちょっとした演算の影響で最適化されないことも。

このLTでは、そんな「Swiftの末尾再帰、信じすぎ注意!」という話を、実際に書いて動かして試してみた結果とあわせて紹介します。

なぜStack Overflowが起きたのか?
末尾再帰が最適化される場合とされない場合の差は?
今は大丈夫なコードでも、未来永劫ずっと安全?

楽しく聞いて、明日から「ちょっと再帰が心配になる」。
そんな5分をお届けします。