gpt4 book ai didi

haskell - 在 Haskell 中过滤斐波那契数列

转载 作者:行者123 更新时间:2023-12-02 14:21:43 26 4
gpt4 key购买 nike

我正在尝试过滤包含斐波那契数列的列表。

我需要的只是奇数,并且小于或等于 N

这是我到目前为止所拥有的:

fib   n | n == 0         = 0
| n == 1 = 1
| otherwise = fib (n-1) + fib (n-2)

fibs n = [a | a <- [fib x | x <- [1..]], odd a, a < n]

这会给我我想要的,但同时该解决方案不起作用,因为我不知道如何停止fib 函数检索元素。当然,这是因为 x <- [1..]

我考虑过两种选择:

  1. n 中设置限制(取决于 x <- [1..] )
  2. 定义 fibs 递归,以便我知道何时停止(在编写问题时考虑过)

我怎样才能做到这一点?

我不是在寻找有效的方法

编辑:
这是我最后得到的两个解决方案:

fib   n | n == 0         = 0
| n == 1 = 1
| otherwise = fib (n-1) + fib (n-2)

fibsAux n k xs | a < n = fibsAux n (k+1) (xs ++ [a])
| otherwise = xs
where
a = fib k
fibs n = filter odd $ fibsAux n 0 []

以及使用@hammar建议的一个:

fibs x = takeWhile (< x) [a | a <- [fib x | x <- [1..]], odd n]

最佳答案

看看the takeWhile function来自 Data.List(并由 Prelude 重新导出)。例如,

takeWhile (< 4) [1..] == [1, 2, 3]

请注意,即使列表是无限的,一旦找到不满足谓词的元素,就会终止。

关于haskell - 在 Haskell 中过滤斐波那契数列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5879415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com