Slide 1

Slide 1 text

再帰関数 2025年04月22日 Shigeki Shoji

Slide 2

Slide 2 text

庄司重樹 Instructional Designer 受賞歴 2024 Japan AWS All Certifications Engineers 2023 Japan AWS Top Engineers

Slide 3

Slide 3 text

このコードを見て不安になりますか? 3 def hoge: Unit = { val line = StdIn.readLine("入力(終了したいときは exit と入力): "); if (line != "exit") { hoge; } }

Slide 4

Slide 4 text

スタックオーバーフローになるのでは? • コードがコンピュータの中でどのように処理されるかを認識し て、コンピュータに寄り添ったコードを書いてませんか? • コードがどういう問題を起こすかを想像して書くよりも、もっと直感 的に人間中心にしたい。もしそれが深刻な問題を起こすのであれば、 コンパイラなり処理系が警告するか、可能な限り自動的に問題が起こ らない動作になるようにしてほしい 4

Slide 5

Slide 5 text

Scalaなら末尾再帰が使用可能 5 import scala.annotation._; @tailrec def hoge: Unit = { val line = StdIn.readLine("入力(終了したいときは exit と入力): "); if (line != "exit") { hoge; } } コンパイル後のコードはループに最適化され、繰り返し回数 が原因のスタックオーバーフローは発生しない

Slide 6

Slide 6 text

6 ありがとうございました