使用遞迴查詢數字的各位數字之和的 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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告