不能在地图内使用重复

时间:2016-02-23 13:40:06

标签: clojure

我想以递归方式调用函数达10000次,但对于我的堆栈显然很大。这就是为什么我尝试使用loop / recur但我遇到了一个问题。我的功能如下:

...
(max (map #(recur %) subcollection))

似乎复发不适用于深度搜索。 那么做长DFS(比堆栈可以处理的时间长)的“最先进”是什么

谢谢。

1 个答案:

答案 0 :(得分:2)

recur用于编写尾递归,因为JVM不支持自动尾递归优化。

尾递归意味着调用递归函数需要是最后必须完成的事情。如果是这种情况,则不必返回调用方法,因此您不必为其保留堆栈。

你写的东西需要在递归函数返回后做更多的事情。因此需要保留堆栈帧。

使用此功能的“现状”是您必须重新构造递归函数以成为尾递归函数。通常情况下,这可以通过使用递归函数调用传递的累加器来实现。