使用递归查找数字阶乘的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` 函数。

更新于:2023年3月27日

1K+ 浏览量

启动您的职业生涯

完成课程获得认证

开始
广告