使用递归查找数字阶乘的Haskell程序
在 Haskell 中,我们使用递归以及 `foldl` 和 `product` 函数来查找数字的阶乘。在第一个示例中,我们将使用递归以及基例和递归情况;在第二个示例中,我们将使用 `factorial n = foldl (*) 1 [1..n]` 函数;在第三个示例中,我们将使用 `factorial n = product [1..n]` 函数。
算法
步骤 1 − 定义用户自定义的递归阶乘函数,
对于示例 1 & 2 −
factorial 0 = 1 factorial n = n * factorial (n-1).
对于示例 3 −
factorial n = foldl (*) 1 [1..n].
对于示例 4 −
factorial n = product [1..n].
步骤 2 − 程序执行将从主函数开始。`main()` 函数控制整个程序。它被写成 `main = do`。在主函数中,我们通过传递数字 5 来测试阶乘函数,它应该输出 120 (5*4*3*2*1)。
步骤 3 − 初始化名为“num”的变量。它将保存要计算阶乘的数字。
步骤 4 − 调用函数后,使用 `print` 函数将结果阶乘打印到控制台。
示例 1
在这个示例中,我们将看到如何使用递归查找数字的阶乘。这可以通过使用用户自定义的递归函数来完成。
factorial :: Integer -> Integer factorial 0 = 1 factorial n = n * factorial (n-1) main :: IO () main = do let num = 5 print (factorial num)
输出
120
示例 2
在这个示例中,我们将看到如何使用递归情况查找数字的阶乘。`factorial'` 函数以整数作为输入,并返回该数字的阶乘。该函数使用基例:如果输入为 0,则返回 1。否则,它将自身调用,输入减 1,并将结果乘以原始输入。然后,主函数将值 5 赋值给变量 num,并使用 num 作为参数调用 `factorial'` 函数并打印结果。
factorial' :: Integer -> Integer factorial' n | n == 0 = 1 | otherwise = n * factorial' (n-1) main :: IO () main = do let num = 5 print (factorial' num)
输出
120
示例 3
在这个示例中,我们将看到如何使用递归查找数字的阶乘。这可以通过使用 `foldl` 函数来完成。
factorial :: Integer -> Integer factorial n = foldl (*) 1 [1..n] main :: IO () main = do let num = 5 print (factorial num)
输出
120
示例 4
在这个示例中,我们将看到如何使用递归查找数字的阶乘。这可以通过使用 `product` 函数来完成。
factorial :: Integer -> Integer factorial n = product [1..n] main :: IO () main = do let num = 5 print (factorial num)
输出
120
结论
在 Haskell 中,要使用递归查找数字的阶乘,我们可以使用用户自定义函数或 `foldl` 和 `product` 函数。