假设我有这样的功能:
user=> (def m {10 5, 5 2, 2 1})
#'user/m
user=> (defn hierarchy [x] (when x (cons x (hierarchy (get m x)))))
#'user/hierarchy
user=> (hierarchy 10)
(10 5 2 1)
user=>
显然这在这里很好,因为堆栈深度会很小。但是对于这种一般类型的问题,我正在构建一个我想要返回的列表,递归调用总是在 cons 调用中结束。我如何将其转换为尾递归,以便我可以使用递归而不占用堆栈空间?