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