使用递归查找数字的各位数字之和的 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 函数来计算数字的各位数字之和。

更新于: 2023-03-27

458 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告