【问题标题】:Storing fibonacci values存储斐波那契值
【发布时间】:2015-06-26 19:12:21
【问题描述】:

我对斐波那契做了一个非常简单的解决方案:

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

ps:我正在尝试解决这个练习:https://www.4clojure.com/problem/26

【问题讨论】:

    标签: clojure functional-programming fibonacci


    【解决方案1】:

    Clojure 函数返回最后一个计算形式的结果。您可以在向量中累积斐波那契数。

    【讨论】:

      【解决方案2】:

      斐波那契的一个很好的懒惰版本是:

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

      【讨论】:

        猜你喜欢
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        • 2015-06-05
        • 2014-05-23
        • 2013-08-09
        • 2011-11-27
        • 2013-03-31
        • 2014-05-03
        相关资源
        最近更新 更多