【问题标题】:Fibonacci sequence value in haskellhaskell中的斐波那契序列值
【发布时间】:2011-05-10 20:34:16
【问题描述】:

如何使用该代码获得斐波那契数列的总和:

fibs= 0 : 1 : zipWith (+) fibs (tail fibs)

edit: take 5 fibs 给出 [0,1,1,2,3] 的列表,所以第 5 个元素的值为 3,要提取它,我们必须输入:'last(take(5 fibs))'我们得到 3。以此类推

如果我们使用解释器寻找第 5 个元素,我们得到 [ 0, 1, 2, 3] 的列表,最后一个元素与第 5 个元素的值相同,如何获取该列表的 LAST 元素? 我可以使用 last 来“制作”它吗?你有什么想法吗?

【问题讨论】:

  • let fiblist = 0:1 : (zipWith (+) fiblist (tail fiblist)) in (last(take 5 fiblist)) 这就是(我认为)解决我的问题的方法 例如对于 fiblist 5 我得到 3 ,对于 15 -> 377 所以斐波那契元素的正确值 很好,但不漂亮;)
  • 请编辑您的问题以清楚地确定您要完成的任务。

标签: list haskell lazy-evaluation


【解决方案1】:

该定义产生一个无限整数流。没有最后一个元素。

如果您想索引列表中的特定元素,可以使用(!!) 运算符:

> [1..] !! 7
8

【讨论】:

    【解决方案2】:

    我不完全清楚你在问什么,但如果你有一个非空非无限(即,不是fibs,而是,例如,take n fibs 对于某些n)列表,你确实可以通过对它应用last 来获得它的最后一个元素。或者,如果您只想要列表的第 n 个元素(从零开始并假设列表至少有 n+1 个元素),您可以使用listName !! n 来提取它。

    【讨论】:

      【解决方案3】:

      好吧,如果你只想要列表的第 10 个元素:

      last (take 10 fibs)
      

      如果你想要前 10 个元素的总和:

      sum (take 10 fibs)
      

      顺便说一句,fibs 有一个稍微简单的表达式,只使用递归:

      fibs = (fibgen 0 1) where fibgen a b = a : fibgen b (a+b)
      

      【讨论】:

        猜你喜欢
        • 2011-02-17
        • 2017-12-06
        • 2015-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        相关资源
        最近更新 更多