Clojure递归实现斐波那契数列

;递归,消耗栈空间
(defn stack-consuming-fibo [n]
  (cond
   (= n 0) 0 
   (= n 1) 1
   :else (+ (stack-consuming-fibo (- n 1))
        (stack-consuming-fibo (- n 2)))))  
;尾递归,JVM不能自动TCO
(defn tail-fibo [n]
  (letfn [(fib
            [current next n]
            (if (zero? n)
              current
              (fib next (+ current next) (dec n))))]
    (fib 0N 1N n)))
;自递归与recure
(defn recur-fibo [n]
  (letfn [(fib
          [current next n]
          (if (zero? n)
            current
            (recur next (+ current next) (dec n))))]
    (fib 0N 1N n)))
;惰性队列
(defn lazy-seq-fibo
  ([]
   (concat [0 1] (lazy-seq-fibo 0N 1N)))
  ([a b]
   (let [n (+ a b)]
     (lazy-seq
      (cons n (lazy-seq-fibo b n))))))
;惰性队列&现有序列库
(defn fibo []
  (map first (iterate (fn [[a b]] [b (+ a b)]) [0N 1N])))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容