这个递归函数如何逐步工作:
(fn foo [n]
(if (< n 10)
[n]
(conj (foo (quot n 10))
(mod n 10))))
我理解有问题:让我说我将它作为n
给出数字123,它将返回其数字的向量。在到达1
和(< 1 10)
的最后一步,它应该转到当时的[n]
,返回[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]