十进制 - > Hex在Haskell中递归

时间:2014-10-13 02:34:32

标签: haskell recursion

我必须找到一个递归函数来将十进制数转换为十六进制数。到目前为止,我的代码似乎只能部分工作。我真的很困难。有人可以帮我解决这个问题。感谢

这是我的代码:

 recurse :: Int -> [Char]
 recurse n
  |(n <= 15)            =convDecHex(quot n 16)
  |otherwise            =reverse(convDecHex (n `mod` 16) ++ recurse(quot n 16))

2 个答案:

答案 0 :(得分:2)

第一个quot n 16可能没有做到你的想法。如果n <= 15,则convDecHex已经可以使用n,因为当参数小于或等于15时,它的所有(正)值都已存在。< / p>

此外,您正在逆转它并在每一步都将其反转。而不是这样做,你只想反转一次。

答案 1 :(得分:0)

仅供将来参考 - 这是一个有效的例子:

import Data.Char (intToDigit, toUpper)

toHex :: Int -> String
toHex = map toUpper . reverse . recurse
  where recurse n
          | n < 16    = [ intToDigit n ]
          | otherwise = let (q,r) = n `divMod` 16
                        in (intToDigit r) : recurse q

一个例子:

λ> toHex (16*16*14 + 16*4 + 11)
"E4B"