使用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 个数。我们使用了两个辅助函数:fibonacci 和 fibonacciHelper。
fibonacci 函数首先对输入进行检查,当输入小于等于0时,抛出一个错误。然后,我们初始化前两个斐波那契数列的数 a 和 b。如果 n 小于等于2,直接返回第 n 个数的值。否则,我们调用 fibonacciHelper 函数来计算第 n 个数的值。
fibonacciHelper 函数采用三个参数:当前斐波那契数列的前两个数 a 和 b,以及剩余要计算的数的数量 n。如果 n 小于0,即计算完成,返回当前斐波那契数列的第二个数 b。否则,我们将 a 和 b 更新为下一个斐波那契数列的前两个数,并将 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 较大时,计算可能会非常耗时。在这种情况下,可以考虑使用其他更高效的方法来计算斐波那契数列。
