【问题标题】:Recursive functions in clojureclojure 中的递归函数
【发布时间】:2015-09-09 11:47:58
【问题描述】:

这个递归函数是如何一步一步工作的:

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

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

【问题讨论】:

    标签: function recursion clojure


    【解决方案1】:

    在到达1(&lt; 1 10) 的最后一步,它确实转到了[n] 的then-part,返回[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]
    

    【讨论】:

    • 我明白了。我的问题是我在考虑到达 (foo (quot n 10)) 时它会回到函数的起点,因此我没有看到它是嵌套的 conjs 束。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2011-08-03
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多