我想以递归方式调用函数达10000次,但对于我的堆栈显然很大。这就是为什么我尝试使用loop / recur但我遇到了一个问题。我的功能如下:
...
(max (map #(recur %) subcollection))
似乎复发不适用于深度搜索。 那么做长DFS(比堆栈可以处理的时间长)的“最先进”是什么
谢谢。
答案 0 :(得分:2)
recur
用于编写尾递归,因为JVM不支持自动尾递归优化。
尾递归意味着调用递归函数需要是最后必须完成的事情。如果是这种情况,则不必返回调用方法,因此您不必为其保留堆栈。
你写的东西需要在递归函数返回后做更多的事情。因此需要保留堆栈帧。
使用此功能的“现状”是您必须重新构造递归函数以成为尾递归函数。通常情况下,这可以通过使用递归函数调用传递的累加器来实现。