实现函数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