Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 ありがとうございました