我是clojure的新手,他想看看所有的大惊小怪.找出感受它的最佳方法是编写一些简单的代码,我想我会从Fibonacci函数开始.
我的第一个努力是:
(defn fib [x, n]
(if (< (count x) n)
(fib (conj x (+ (last x) (nth x (- (count x) 2)))) n)
x))
Run Code Online (Sandbox Code Playgroud)
要使用它,我需要在调用函数时使用[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)))
Run Code Online (Sandbox Code Playgroud)
和
(defn fib3 [n]
(take n
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1]))))
Run Code Online (Sandbox Code Playgroud)
无论如何,更多的是为了锻炼而不是其他任何东西,任何人都可以帮助我使用纯粹的递归Fibonacci函数的更好版本吗?或者可能分享更好/不同的功能?