【发布时间】:2014-12-14 00:43:42
【问题描述】:
我对 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 ...
有什么办法可以克服吗?
【问题讨论】:
标签: clojure recurrence