Clojure 无法在映射内使用重复

Clojure 无法在映射内使用重复,clojure,Clojure,我想递归调用函数多达10000次,但对于我的堆栈来说,它显然太大了。这就是为什么我尝试使用循环/重现,但我遇到了一个问题。我的函数的结尾如下: ... (max (map #(recur %) subcollection)) 看来复发对深度优先搜索不起作用。 那个么,做比堆栈能够处理的更长的长DFS的最先进技术是什么呢 多谢各位 recur是对尾部递归进行编码,因为JVM不支持自动尾部递归优化 尾部递归意味着调用递归函数是必须完成的最后一件事。如果是这种情况,则不必返回调用方法,因此不必为其保

我想递归调用函数多达10000次,但对于我的堆栈来说,它显然太大了。这就是为什么我尝试使用循环/重现,但我遇到了一个问题。我的函数的结尾如下:

...
(max (map #(recur %) subcollection))
看来复发对深度优先搜索不起作用。 那个么,做比堆栈能够处理的更长的长DFS的最先进技术是什么呢

多谢各位

recur是对尾部递归进行编码,因为JVM不支持自动尾部递归优化

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

在递归函数返回后,您编写的代码需要做更多的事情。因此,需要保留堆栈帧


实现这一点的“最新技术”是,您必须将递归函数重新格式化为尾部递归函数。通常,通过使用递归函数调用传递的累加器可以最好地实现这一点。

map接受f并为N中的每个元素生成fn,您希望Recurr%做什么?也许先用一个参数来说明问题f?重复%3作为一个例子是错误的-无论map或任何其他HOF;换句话说,请解释一下,我想递归调用函数,最多10000次。假设我有一棵深度>10000的树。我想做DFS。我该怎么做?看一看。文档:对表单执行深度优先、后序遍历。