使用递归计算幂的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 中,可以使用递归以及各种情况来计算幂。此外,还可以使用尾递归来计算。
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP