使用递归计算幂的Haskell程序


在 Haskell 中,我们可以使用递归以及各种情况来计算幂,也可以使用尾递归。在第一个示例中,我们将使用递归以及基本情况(power _ 0 = 1)和递归情况(power x y = x * power x (y-1))。在第二个示例中,我们将使用递归情况(power' x y | y == 0 = 1| otherwise = x * power' x (y-1)),在第三个示例中,我们将使用尾递归。

算法

  • 步骤 1 − 定义用户自定义的递归幂函数,例如:

  • 示例 1 −

power _ 0 = 1
power x y = x * power x (y-1).
  • 示例 2 −

power' x y
   | y == 0 = 1
   | otherwise = x * power' x (y-1).
  • 示例 3 

power x y = power' x y 1
   where
      power' x y acc
         | y == 0 = acc
         | otherwise = power' x (y-1) (acc*x).
  • 步骤 2 − 程序执行将从主函数开始。main() 函数控制整个程序。它写成 main = do。在 main 函数中,程序将 x 设置为 2,y 设置为 5,然后使用这些值作为参数调用 power 函数。

  • 步骤 3 − 初始化名为“x”和“y”的变量。它们分别保存底数和指数值。

  • 步骤 4 − 函数调用完成后,使用‘print’函数将结果幂打印到控制台。

示例 1

在这个示例中,定义了一个名为 power 的函数,它接收两个整数 x 和 y 作为参数。该函数使用递归来计算 x 的 y 次幂。当 y 为 0 时为基本情况,在这种情况下,函数返回 1。

power :: Integer -> Integer -> Integer
power _ 0 = 1
power x y = x * power x (y-1)

main :: IO ()
main = do
   let x = 2
   let y = 5
   print (power x y)

输出

32

示例 2

这是 Haskell 中递归函数的一个简单实现,它使用递归计算数字的幂。该函数接收两个参数 x 和 y,并计算 x 的 y 次幂。当 y 等于 0 时为基本情况,在这种情况下,函数返回 1。在递归情况下,该函数将 x 与使用参数 x 和 y-1 调用函数的结果相乘,有效地将 x 提高到 y 的幂。

power' :: Integer -> Integer -> Integer
power' x y
   | y == 0 = 1
   | otherwise = x * power' x (y-1)

main :: IO ()
main = do
let x = 2
let y = 5
print (power' x y)

输出

32

示例 3

在这个示例中,实现了用于计算数字幂的尾递归方法。该函数接收两个参数 x 和 y,其中 x 是底数,y 是指数。它定义了一个内部函数 power',该函数接收三个参数 x、y 和 acc,其中 acc 用于存储中间结果。该函数检查 y 是否等于 0,如果是,则返回 acc,它是最终结果。如果 y 不等于 0,则使用 y 减 1 和 acc 乘以 x 自我调用。

power :: Integer -> Integer -> Integer
power x y = power' x y 1
   where
      power' x y acc
         | y == 0 = acc
         | otherwise = power' x (y-1) (acc*x)

main :: IO ()
main = do
let x = 2
let y = 5
print (power x y)

输出

32

结论

在 Haskell 中,可以使用递归以及各种情况来计算幂。此外,还可以使用尾递归来计算。

更新于: 2023年3月27日

663 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.