-2
是否有不同的更清潔的生成tribonacci的方法?Clojure中的Tribonacci功能
(defn tribonacci [x](last (reduce
(fn [[a b c] n]
(conj [b c] (+ a b c))) [0 0 1] (range (- x 3)))))
是否有不同的更清潔的生成tribonacci的方法?Clojure中的Tribonacci功能
(defn tribonacci [x](last (reduce
(fn [[a b c] n]
(conj [b c] (+ a b c))) [0 0 1] (range (- x 3)))))
這是我會怎麼寫呢:
(defn tribonacci [a b c]
(lazy-seq (cons a (tribonacci b c (+' a b c)))))
如果你想獲得ñ日tribonacci號碼,只要使用,例如,(tribonacci 0 0 1)
然後調用該nth
。
您可以創建這些數字的懶序列,並從它採取必要的元素:
user> (def t (lazy-cat [1 1 2] (map +' t (rest t) (nthrest t 2))))
#'user/t
user> (take 20 t)
(1 1 2 4 7 13 24 44 81 149 274 504 927 1705 3136 5768 10609 19513 35890 66012)
更換[1 1 2]
到[0 1 1]
,如果你需要他們從0
這是一個壞主意開始,一旦你意識到't'的某些元素,那些元素將不會被垃圾回收,因爲var保存在序列的頭部。 –
是的,我知道,只是想展示懶惰序列的魔力。 (因爲問題是「有另一種方式」,猜猜這是可能的答案 – leetwinski