使用遞迴查詢數字的各位數字之和的 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 函式來計算數字的各位數字之和。