使用递归查找给定数字的反转的Haskell程序


在Haskell中,我们可以使用递归和辅助函数来查找给定数字的反转。在第一个例子中,我们将使用(reverseNumHelper n rev)函数,在第二个例子中,我们将使用(reverseNum n | n < 10 = n| otherwise = (n `mod` 10) * (10 ^ numDigits (n `div` 10)) + reverseNum (n `div` 10))函数。

使用递归和辅助函数查找给定数字的反转

在这种方法中,reverseNumHelper函数接受两个参数:n和rev。n是要反转的数字,rev是到目前为止反转的数字。该函数使用累加器rev来跟踪到目前为止反转的数字。该函数重复取n的最后一位数字(n mod 10),将其添加到rev乘以10 (rev * 10 + (n mod 10)),然后将n除以10 (n div 10)以获得剩余的数字。

算法

  • 步骤1 − 使用辅助函数定义用户自定义的递归反转数字函数,其定义如下:

reverseNumHelper n rev
| n == 0 = rev
| otherwise = reverseNumHelper (n `div` 10) (rev * 10 + (n `mod` 10)) .
  • 步骤2 − 程序执行将从主函数开始。main()函数控制整个程序。它被写成main = do。在主函数中,通过向其传递参数来调用用户自定义的递归函数。

  • 步骤3 − 变量“num”被初始化。它将保存要打印其反转的数字。

  • 步骤4 − 函数调用后,使用‘show’函数将反转后的数字打印到控制台。

示例1

在这个例子中,使用辅助函数reverseNumHelper来反转数字。reverseNum函数充当包装器,它用n作为第一个参数,0作为第二个参数调用reverseNumHelper。

reverseNum :: Integer -> Integer
reverseNum n = reverseNumHelper n 0

reverseNumHelper :: Integer -> Integer -> Integer
reverseNumHelper n rev
   | n == 0 = rev
   | otherwise = reverseNumHelper (n `div` 10) (rev * 10 + (n `mod` 10))

main :: IO ()
main = do
   let num = 12345
   let reversedNum = reverseNum num
   putStrLn (show reversedNum)

输出

54321

使用递归查找给定数字的反转

在这种方法中,reverseNum函数使用递归来反转数字,首先将n的最后一位数字(n mod 10)乘以10的幂,该幂等于n剩余数字的位数(10 ^ numDigits (n div 10))。然后递归计算剩余数字的反转(reverseNum (n div 10))并将其添加到结果中。

算法

  • 步骤1 − 用户自定义的递归反转函数定义如下:

reverseNum n
| n < 10 = n
| otherwise = (n `mod` 10) * (10 ^ numDigits (n `div` 10)) + reverseNum (n `div` 10).
  • 步骤2 − 用户自定义的numDigits函数定义如下:

numDigits n
| n < 10 = 1
| otherwise = 1 + numDigits (n `div` 10).
  • 步骤3 − 程序执行将从主函数开始。main()函数控制整个程序。它被写成main = do。在主函数中,用户自定义的递归函数被反复递归调用,并向其传递参数。

  • 步骤4 − 变量“num”被初始化。它将保存要打印其反转的数字。

  • 步骤5 − 函数调用后,使用‘show’函数将反转后的数字打印到控制台。

示例1

在这个例子中,使用了两个函数reverseNum和numDigits。reverseNum函数接受一个整数参数n并返回其反转。numDigits函数接受一个整数参数n并返回n的位数。

reverseNum :: Integer -> Integer
reverseNum n
   | n < 10 = n
   | otherwise = (n `mod` 10) * (10 ^ numDigits (n `div` 10)) + reverseNum (n `div` 10)

numDigits :: Integer -> Integer
numDigits n
   | n < 10 = 1
   | otherwise = 1 + numDigits (n `div` 10)

main :: IO ()
main = do
   let num = 12345
   let reversedNum = reverseNum num
   putStrLn (show reversedNum)

输出

54321

结论

数字的反转是由反向读取原始数字的数字形成的新数字。例如,数字12345的反转是54321。

在Haskell中,可以使用递归反转数字。递归允许找到简洁优雅的解决方案。这是一种用基本情况和递归情况定义函数的方法。这些函数可以接受任何数字作为参数,并将相同数字的反转返回到控制台。

更新于:2023年3月27日

浏览量:315

启动您的职业生涯

通过完成课程获得认证

开始学习
广告