HaskellFibonacci最大指定数字?

我有一个 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]

takeWhile (<= 10) fibs

这是更有效的,因为我们不需要为每个斐波那契数从零开始。此外,它在O(k)时间内构造第k个项目。

  • 这是线性时间,而 OP 代码是指数时间。这样效率更高。

回答

您想获取小于 10 的斐波那契数,因此:

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

fibList = map fib [0..]

takeWhile (<=10) fibList

---> [0,1,1,2,3,5,8]


以上是HaskellFibonacci最大指定数字?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>