【发布时间】:2011-01-13 04:11:55
【问题描述】:
以下算法的直接剪切和粘贴:
def msort[T](less: (T, T) => Boolean)
(xs: List[T]): List[T] = {
def merge(xs: List[T], ys: List[T]): List[T] =
(xs, ys) match {
case (Nil, _) => ys
case (_, Nil) => xs
case (x :: xs1, y :: ys1) =>
if (less(x, y)) x :: merge(xs1, ys)
else y :: merge(xs, ys1)
}
val n = xs.length / 2
if (n == 0) xs
else {
val (ys, zs) = xs splitAt n
merge(msort(less)(ys), msort(less)(zs))
}
}
在 5000 个长列表上导致 StackOverflowError。
有什么办法可以优化这个,这样就不会发生了?
【问题讨论】:
标签: scala recursion stack-overflow