【发布时间】:2014-07-31 17:27:54
【问题描述】:
我试图寻找一些算法来查找给定列表的所有子列表,这就是我发现的:
空列表的唯一子列表是空列表。 x:xs 的子列表(即头部 x 和尾部 xs 的列表)是 xs 的所有子列表以及 xs 的每个带有 x 前缀的子列表。
取自Sublists of a list using list comprehension
这是我实现的:
def combinations(occurrences: Occurrences): List[Occurrences] = occurrences match{
case List() => List()
case x::xs => combinations(xs) ::: combinations(x :: xs)
}
正如我所料,这个函数给出了一个堆栈溢出错误,但是在那个问题的例子中它对他有用。可能是我误解了他解释的原理?我如何使用递归来解决这样的问题?我的错误在哪里?
我在哪里可以找到这样的算法?
【问题讨论】:
-
在 ::: 之后有无限递归
-
@Daenyth 是的。那是正确的。检查Kigyo的答案。我现在可以看到这个算法,它在我的案例中失败了。你知道更好的算法吗?
标签: algorithm list scala recursion stack-overflow