0

我想破解一个快速脚本,它简单地将一个核苷酸序列(一个像“ATGAAGAAC...”这样的字符串)拆分成一个三元组列表,也就是密码子(字符串:“ATG”、“AAG”、“AAC”......)做其他事情。

这个单线有什么问题,为什么我会收到“java.lang.OutOfMemoryError: GC overhead limit exceeded”?

def tripletize(s:String, accu:List[String] = List.empty[String]):List[String] = tripletize(s.drop(3), s.take(3) :: accu)

我不是在问那是什么,而是我为什么得到它以及如何避免。顺便说一句,我知道这会给我相反的顺序,但我不知道如何避免 scala 将 String 视为一个集合本身。即:

scala> List.empty ++ "hello"
res6: List[Char] = List(h, e, l, l, o)
4

1 回答 1

4

你什么时候停下来? drop不会仅仅因为没有什么可以放弃就终止递归。还有,你回什么?你从来不说。你需要做类似的事情

= if (s.length==0) accu else tripletize(s.drop(3), s.take(3) :: accu)
于 2012-08-29T15:59:43.170 回答