簡體   English   中英

Clojure中的遞歸函數

[英]Recursive functions in clojure

此遞歸函數如何逐步工作:

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

我在理解上有問題:可以說我給它指定n為123,它將返回其數字的向量。 在最后一步到達1(< 1 10) ,應轉到然后的部分[n] ,返回[1]並退出遞歸。 所以這不會發生,我在劇中缺少什么?

在到達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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM