末尾再帰したらいいのはわかってる。わかってるんだけど、末尾再帰になってないのを見落とさないのは難しい、っていうのが普通の人なので、IntelliJ Idea を使うと幸せになれるらしい。
これはただの再帰
def fuga(xs:Seq[String]):String = xs match {
case x :: Nil => x
case x :: tail => x + "\n" + fuga(tail)
}
println(fuga(List("a","b","c")))
よく考えたら最後に評価されるのが +
メソッドになる。
これが末尾再帰
def hogehoge(tmp:String)(xs:Seq[String]):String = xs match {
case x :: Nil => tmp + x
case x :: tail => hogehoge(tmp + x + "\n")(tail)
}
val hoge = hogehoge("")_
println(hoge(List("a","b","c")))
IntelliJ でこれ書き比べたら違うアイコンが付くので感動したらいいと思いますね。