【发布时间】:2012-02-14 22:24:15
【问题描述】:
我是 clojure 的新手,想看看有什么大惊小怪的。弄清楚感受它的最佳方法是编写一些简单的代码,我想我会从斐波那契函数开始。
我的第一个努力是:
(defn fib [x, n]
(if (< (count x) n)
(fib (conj x (+ (last x) (nth x (- (count x) 2)))) n)
x))
要使用它,我需要在调用函数时使用 [0 1] 为 x 播种。我的问题是,如果不将其包装在单独的函数中,是否可以编写一个仅返回元素数量的函数?
做一些阅读让我找到了一些更好的方法来实现相同的功能:
(defn fib2 [n]
(loop [ x [0 1]]
(if (< (count x) n)
(recur (conj x (+ (last x) (nth x (- (count x) 2)))))
x)))
和
(defn fib3 [n]
(take n
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1]))))
无论如何,为了练习,任何人都可以帮助我获得更好的纯递归斐波那契函数版本吗?或者也许共享一个更好/不同的功能?
【问题讨论】:
-
fib3 是其中最接近 Clojure 的
标签: recursion clojure fibonacci