有一种简单的方法可以区分迭代过程和递归过程,问问自己:还有什么要做的吗
之后
递归调用?如果答案是肯定的,那么就是一个递归过程,这就是这里发生的事情:
(inc (+ (dec a) b))
^
this is invoked after the recursive call
如果答案是否定的,那么这是一个迭代过程,这里就是这样:
(+ (dec a) (inc b))
^
the recursive call is the last thing we do
在第二种情况下,我们这样说
+
tail call
. Clojure无法进行尾部调用优化,除非您使用
recur
.