我为斐波纳契做了一个非常简单的解决方案:
(defn fib [n]
(if (or (zero? n) (= n 1))
1
(+ (fib (dec n)) (fib (- n 2)))))
但不是返回值,例如
(fib 6) ; 13
我会返回序列0,1,1,2,3,5,8,13 ......我正在考虑将值存储在一个序列中,但是我应该在哪里返回序列?我的意思是,验证我是否在最后一次调用fib时听起来不太好。
ps:我正在尝试解决这个问题:https://www.4clojure.com/problem/26
答案 0 :(得分:0)
Clojure函数返回最后一个评估表单的结果。您可以在向量中累积斐波纳契数。
答案 1 :(得分:0)
一个不错的懒人版斐波那契是:
(def lazy-fib
"Lazy sequence of fibonacci numbers"
((fn rfib [a b]
(lazy-seq (cons a (rfib b (+' a b)))))
0 1))
然后你可以用它:
(fn [n] (take n lazy-fib))
在针对此问题进行一些格式化之后,这给出了:
(fn[n]
(drop 1 (take (inc n) ((fn rfib [a b]
(lazy-seq (cons a (rfib b (+' a b)))))
0 1))))