clojure中的递归函数

时间:2015-09-09 11:47:58

标签: function recursion clojure

这个递归函数如何逐步工作:

(fn foo [n]
  (if (< n 10)
    [n]
    (conj (foo (quot n 10))
          (mod n 10))))

我理解有问题:让我说我将它作为n给出数字123,它将返回其数字的向量。在到达1(< 1 10)的最后一步,它应该转到当时的[n],返回[1]并退出递归。所以这不会发生,我在剧中缺少什么?

1 个答案:

答案 0 :(得分:2)

在到达1(< 1 10)的最后一步,它会转到当时的[n],返回[1],但它不会从递归,仅来自最内层的调用。

评估如下:

(foo 123)
(conj (foo 12) 3)
(conj (conj (foo 1) 2) 3)
(conj (conj [1] 2) 3)
(conj [1 2] 3)
[1 2 3]