Clojure - 递归


我们在前面的主题中已经看到了 recur 语句,虽然“for”循环有点像循环,但recur是 Clojure 中真正的循环。

如果你有编程背景,你可能听说过尾递归,这是函数式语言的一大特性。这种递归特殊形式是实现尾递归的形式。正如“尾递归”一词所示,recur 必须在尾部位置调用。换句话说,recur 必须是最后评估的。

recur 语句的最简单示例是在“for”循环中使用。在以下示例中,recur 语句用于更改变量“i”的值并将该变量的值反馈回循环表达式。

例子

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (loop [i 0]
      (when (< i 5)
      (println i)
      (recur (inc i)))))
(Example)

输出

上述程序产生以下输出。

0
1
2
3
4