Clojure - 递归



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

如果你有编程背景,你可能听说过尾递归,它是函数式语言的一个主要特性。这个 recur 特殊形式就是实现尾递归的那个。正如“尾递归”这个词所暗示的,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
广告