使用遞迴將十進位制數轉換為二進位制的Haskell程式


在Haskell中,我們將使用遞迴和尾遞迴將十進位制數轉換為二進位制。在第一個例子中,我們將使用基本情況(decToBin 0 = "0" 和 decToBin 1 = "1")和遞迴情況(decToBin n = decToBin (n `div` 2) ++ show (n `mod` 2))。而在第二個例子中,我們將使用尾遞迴函式。

演算法

  • 步驟1 − 定義使用者自定義的decToBin函式,包含基本情況和遞迴情況,如下所示:

  • 示例1和2 −

decToBin 0 = "0"
decToBin 1 = "1"
decToBin n = decToBin (n `div` 2) ++ show (n `mod` 2).
  • 示例3 −

decToBin n = decToBin' n []
   where
      decToBin' 0 acc = acc
      decToBin' n acc = decToBin' (n `div` 2) (show (n `mod` 2) ++ acc).
  • 步驟2 − 程式執行將從main函式開始。main()函式控制整個程式。它寫成main = do。在main函式中,我們定義一個值為15的變數n,並將decToBin n的結果列印到控制檯。輸出將是十進位制數15的二進位制表示。

  • 步驟3 − 名為“n”的變數被初始化。它將儲存要從十進位制數轉換為二進位制的數字。

  • 步驟4 − 函式呼叫後,使用‘print’函式將結果的二進位制數列印到控制檯。

示例1

在這個例子中,我們定義了一個函式decToBin,它接受一個Int引數n並返回其二進位制表示形式(字串)。該函式使用遞迴將十進位制數轉換為二進位制。

decToBin :: Int -> String
decToBin 0 = "0"
decToBin 1 = "1"
decToBin n = decToBin (n `div` 2) ++ show (n `mod` 2)

main :: IO ()
main = do
   let n = 15
   print (decToBin n)

輸出

“1111”

示例2

在這個例子中,結果使用reverse函式反轉,因為十進位制數的二進位制表示是從最低有效位到最高有效位構建的。

decToBin :: Int -> String
decToBin 0 = ""
decToBin n = decToBin (n `div` 2) ++ show (n `mod` 2)

main :: IO ()
main = do
   let n = 15
   print (reverse (decToBin n))

輸出

“1111”

示例3

在這個例子中,我們定義了一個尾遞迴函式decToBin,它接受一個Int引數n並返回其二進位制表示形式(字串)。該函式使用尾遞迴將十進位制數轉換為二進位制。

decToBin :: Int -> String
decToBin n = decToBin' n []
   where
      decToBin' 0 acc = acc
      decToBin' n acc = decToBin' (n `div` 2) (show (n `mod` 2) ++ acc)

main :: IO ()
main = do
   let n = 15
   print (decToBin n)

輸出

“1111”

結論

為了在Haskell中將十進位制數轉換為二進位制,可以編寫一個函式,該函式實現重複將十進位制數除以2並存儲餘數的過程,直到十進位制數變為0。然後,從反向順序獲得的餘數構造十進位制數的二進位制表示。遞迴用於實現這一點。

更新於:2023年3月27日

253 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.