首页 > 解决方案 > 实现函数 logBase2

问题描述

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

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

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

标签: haskell

解决方案


您需要使用 进行递归调用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

推荐阅读