gpt4 book ai didi

haskell - haskell中的斐波那契序列返回所有值

转载 作者:行者123 更新时间:2023-12-04 22:13:30 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Fibonacci Numbers in Haskell

(2 个回答)


9年前关闭。




我需要帮助我使用 haskell 进行分配,它返回一个列表,直到斐波那契数列中的第 n 个数字。


Main> fib 5
[0,1,1,2,3,5]
Main> fib 15
[0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610]

我明白这一点
fib::Int->Int
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

但我不知道如何生成包含直到第 n 个数字的所有值的列表。

谢谢

最佳答案

有一些很酷的方法可以做到这一点,首先是最简单的

fib::Int->Int
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
fibList n = map fib [1..n]

或者我们可以将其合并为一个
fib::Int->[Int]
fib 0 = [0]
fib 1 = [1, 0]
fib n = (head (fib (n-1)) + head (fib (n-2))) : fib (n-1)

所以在这里我们只是将列表构建与递归结合起来。现在我们向疯狂迈出一步
fib n = take n fiblist
where fiblist = 0:1:(zipWith (+) fiblist (tail fiblist))

这里 fiblist是斐波那契数列的无限列表。我们所做的只是捕获适当的数量。这是可能的,因为 Haskell 是“懒惰的”。如果你是 Haskell 的新手,只需微笑和点头。

最后,为了踢腿和咯咯笑
fib = flip take . fix $ \f -> 0 : 1 : (zipWith (+) f (tail f))

除了无点和固定点而不是递归之外,这与上述相同。

同样,如果您是 haskell 的新手,前 2 个更容易理解,几周后回到最后 2 个 :)

关于haskell - haskell中的斐波那契序列返回所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16013273/

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