存储斐波纳契值

时间:2015-04-20 07:17:36

标签: clojure functional-programming fibonacci

我为斐波纳契做了一个非常简单的解决方案:

(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

2 个答案:

答案 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))))