欢迎访问宙启技术站
智能推送

使用Haskell编写一个递归函数来计算斐波那契数列。

发布时间:2023-12-10 08:46:02

下面是使用Haskell编写的递归函数来计算斐波那契数列:

fibonacci :: Int -> Integer
fibonacci n
  | n <= 0 = error "Input must be a positive integer."
  | n == 1 = 0
  | n == 2 = 1
  | otherwise = fibonacciHelper 0 1 (n-3)

fibonacciHelper :: Integer -> Integer -> Int -> Integer
fibonacciHelper a b n
  | n < 0 = b
  | otherwise = fibonacciHelper b (a+b) (n-1)

这个函数的输入参数是一个正整数 n,并且返回斐波那契数列中第 n 个数。我们使用了两个辅助函数:fibonaccifibonacciHelper

fibonacci 函数首先对输入进行检查,当输入小于等于0时,抛出一个错误。然后,我们初始化前两个斐波那契数列的数 ab。如果 n 小于等于2,直接返回第 n 个数的值。否则,我们调用 fibonacciHelper 函数来计算第 n 个数的值。

fibonacciHelper 函数采用三个参数:当前斐波那契数列的前两个数 ab,以及剩余要计算的数的数量 n。如果 n 小于0,即计算完成,返回当前斐波那契数列的第二个数 b。否则,我们将 ab 更新为下一个斐波那契数列的前两个数,并将 n 减1,然后递归调用 fibonacciHelper 函数。

下面是一个使用上述函数来计算斐波那契数列的例子:

main :: IO ()
main = do
  putStrLn "Enter a positive integer: "
  input <- getLine
  let n = read input :: Int
  putStrLn ("The " ++ show n ++ "th Fibonacci number is: " ++ show (fibonacci n))

这个例子中,我们首先要求用户输入一个正整数 n,然后计算并打印出斐波那契数列中第 n 个数的值。

请注意,由于斐波那契数列的增长速度非常快,当 n 较大时,计算可能会非常耗时。在这种情况下,可以考虑使用其他更高效的方法来计算斐波那契数列。