3

これの時間と空間の複雑さは何ですか:

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)LinearSeqO(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
}
4

1 に答える 1