2015-09-09 194 views
0

如何做到這一點遞歸函數的工作一步一步:遞歸函數

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

我有一個認識問題:可以說,我把它作爲n數字123,它將返回其數字矢量。在最後一步,當到達1(< 1 10)時,它應該轉到當時的部分[n],返回[1]並退出遞歸。所以這不會發生,我在劇中錯過了什麼?

回答

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] 
+0

我看。我的問題是,我在到達'(foo(n 10))時想着它回到函數的起點,因此我沒有看到它是用嵌套的'conj'串聯的。 – amirteymuri