使用递归查找数字的各位数字之和的 Haskell 程序
在 Haskell 中,我们可以使用递归以及 mod、div 和其他辅助函数来查找数字的各位数字之和。getCurrentTime 和 NominalDiffTime 函数。在第一个示例中,我们将使用 (sumOfDigits n | n < 10 = n | otherwise = (n `mod` 10) + sumOfDigits (n `div` 10)) 函数。在第二个示例中,我们将使用辅助函数。
算法
步骤 1 − 递归 sumOfDigits 函数定义如下:
例如 1 −
sumOfDigits n | n < 10 = n | otherwise = (n `mod` 10) + sumOfDigits (n `div` 10).
例如 2 −
sumOfDigits n = sumOfDigits' n 0 where sumOfDigits' n acc | n < 10 = acc + n | otherwise = sumOfDigits' (n `div` 10) (acc + n `mod` 10).
步骤 2 − 程序执行将从 main 函数开始。main() 函数控制整个程序。它写成 main = do。它调用 sumOfDigits 函数并将数字作为参数传递给它。
步骤 3 − 变量名为“num”。它将保存需要计算各位数字之和的数字。
步骤 4 − 函数调用后,数字的各位数字之和将打印到控制台。
示例 1
在这个示例中,sumOfDigits 函数以整数作为输入,并使用递归计算其各位数字之和。该函数首先检查输入数字是否小于 10,如果是,则返回数字本身。如果输入数字大于或等于 10,则该函数使用模运算符 (mod) 找到数字的最后一位数字,并使用除法运算符 (div) 删除最后一位数字。然后,它将此数字添加到对 sumOfDigits 函数的递归调用的结果中,并将剩余的数字作为参数传递。递归将持续进行,直到输入数字小于 10,此时将返回最终的各位数字之和。
sumOfDigits :: Integer -> Integer sumOfDigits n | n < 10 = n | otherwise = (n `mod` 10) + sumOfDigits (n `div` 10) main :: IO () main = do let num = 12345 print (sumOfDigits num)
输出
15
示例 2
在这个示例中,可以使用辅助函数来计算 Haskell 中使用递归的数字的各位数字之和,该辅助函数接收数字和累加器作为输入。辅助函数将首先检查数字是否小于 10。如果是,则返回累加器加上数字。如果数字大于或等于 10,则将调用自身,并将数字除以 10 的商和数字除以 10 的余数加上累加器作为参数传递。
sumOfDigits :: Integer -> Integer sumOfDigits n = sumOfDigits' n 0 where sumOfDigits' n acc | n < 10 = acc + n | otherwise = sumOfDigits' (n `div` 10) (acc + n `mod` 10) main :: IO () main = do let num = 12345 print (sumOfDigits num)
输出
15
结论
可以使用不同的方法计算数字的各位数字之和,例如使用 while 循环、for 循环或递归。使用递归的方法涉及将数字分解成其各个数字,然后使用递归函数将它们加在一起。此函数重复调用自身,并修改输入数字(删除一位数字),直到所有数字都加在一起并返回最终的和。在 Haskell 中,可以使用递归以及辅助函数或 div & mod 函数来计算数字的各位数字之和。