我必须找到一个递归函数来将十进制数转换为十六进制数。到目前为止,我的代码似乎只能部分工作。我真的很困难。有人可以帮我解决这个问题。感谢
这是我的代码:
recurse :: Int -> [Char]
recurse n
|(n <= 15) =convDecHex(quot n 16)
|otherwise =reverse(convDecHex (n `mod` 16) ++ recurse(quot n 16))
答案 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"