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