Haskell Fibonacci 达到最大指定数?

2024-05-26

我有一个已启动并正在运行的 Haskell 函数,但它做错了事情。

它应该输出最多指定最大数量的斐波那契数列。

像这样:

fibonacciSequence 86
1 1 2 3 5 8 13 21 33 54

我的代码当前输出斐波那契数列中的前 10 个数字,而不是从 1 到 10 的斐波那契数列。

它输出 1 1 2 3 5 8 13 21 33 54,但它应该是 1,1,2,3,5,8。

fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n - 2)

---print (fib n)
fibList n = map fib[1..n]

main = 
do
putStrLn "The fibonacci series from 1 to n is:"
print (fibList 10)

任何帮助将不胜感激。谢谢!


一种更有效的方法是生成斐波那契数的(无限)列表:

fibs :: [Integer]
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

那么我们可以从其中一个列表大于 10 的那一刻起停止列表takeWhile :: (a -> Bool) -> [a] -> [a] https://hackage.haskell.org/package/base-4.15.0.0/docs/Prelude.html#v:takeWhile:

takeWhile (<= 10) fibs

这是更有效的,因为我们不需要为每个斐波那契数从零开始。此外,它构建了k- 第一项O(k) time.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell Fibonacci 达到最大指定数? 的相关文章

随机推荐