我想破解一个简单的快速脚本,只需将一个核苷酸序列(像“ATGAAGAAC ......”这样的字符串)分成一个三元组列表即密码子(字符串:“ATG”,“AAG”,“AAC”,. ..)用其他东西做。
这个单线程有什么问题,为什么我会得到“java.lang.OutOfMemoryError:超出GC开销限制”?
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)
答案 0 :(得分:4)
你什么时候停止? drop
因为没有什么可以放弃而不会终止递归。另外,你回来了什么?你永远不会说。你需要做一些像
= if (s.length==0) accu else tripletize(s.drop(3), s.take(3) :: accu)