实现函数logBase2

我想在 Haskell 中创建一个 logBase2 函数,它接受 2^x 的结果,然后它返回 x 但我以某种方式失败了......我的代码是

logBase2 :: Integral a => a -> a
logBase2 1 = 0
logBase2 n = 1 + (div n 2)

但它给我带来了一些错误结果,比如如果我把logBase2 8它给我 5 我怎么能让那个东西完美地工作?

回答

您需要使用 进行递归调用div n 2,因此:

logBase2 :: Integral a => a -> a
logBase2 1 = 0
logBase2 n = 1 + logBase2 (div n 2)

否则函数将为n返回1+(n/2) 的值

通过进行递归调用,我们将检索1 + 1 + 1 + 0,因此:

Prelude> logBase2 8
3


以上是实现函数logBase2的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>