定义一般递推功能我有一个想法,对于Clojure中递推关系的一般功能:如何用Clojure
(defn recurrence [f inits]
(let [answer (lazy-seq (recurrence f inits))
windows (partition (count inits) 1 answer)]
(concat inits (lazy-seq (map f windows)))))
然后,例如,我们可以定义斐波那契序列
(def fibs (recurrence (partial apply +) [0 1N]))
此作品不够好,小的数字:
(take 10 fibs)
;(0 1N 1N 2N 3N 5N 8N 13N 21N 34N)
但它吹堆栈,如果要求实现长序列:
(first (drop 10000 fibs))
;StackOverflowError ...
有没有什么办法可以克服呢?
一个想法:我们可以删除CONCAT的使用,使功能多如果我们为状态使用deque(从而允许有效地丢弃最旧的元素,并且有效地添加最新的),那么效率更高。 – noisesmith 2014-10-18 19:23:14
谢谢您也解释失败的原因。 – Thumbnail 2014-10-18 20:58:16
我试过使用队列的建议 - 我认为没有必要使用双流队。请参阅[这里](http://stackoverflow.com/a/43126749/1562315)。 – Thumbnail 2017-03-30 19:29:32