2015-04-20 95 views
0

我做了一个非常简单的解决方案,以斐波那契数:存储斐波纳契值

(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 ...我正在考虑将值存储在一个序列中,但我应该在哪里返回序列?我的意思是,验证我是否在最后一次电话会议上听起来不太好。

PS:我想解决这个练习:https://www.4clojure.com/problem/26

回答

0

Clojure的函数返回的最后评估形式的结果。你可以将你的斐波那契数字累加到一个向量中。

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