これの時間と空間の複雑さは何ですか:
def isPalindrome[A](x: Seq[A]): Boolean = x match {
case h +: middle :+ t => h == t && isPalindrome(middle)
case _ => true
}
の実装に依存しますSeq
か?tail vs for sIndexedSeq
が必要なので? スペースの複雑さは再帰呼び出しスタックによるものですか、それとも Scala は末尾呼び出しの最適化を自動的に行いますか?O(1)
O(n)
LinearSeq
O(n)
import scala.annotation.tailrec
@tailrec def isPalindrome[A](x: Seq[A]): Boolean = x match {
case h +: middle :+ t => h == t && isPalindrome(middle)
case _ => true
}