【发布时间】:2012-12-25 10:15:50
【问题描述】:
在学习考试时,我刚刚在练习中发现了以下任务:
编写一个函数,将整数对数以 2 为底(向上取整),同时仅使用乘法和加法。
我立即尝试,但无法找到任何解决方案。我认为这将是一件容易的事,但我只能在使用整数除法时找到解决方案(例如在 Haskell 中):
log2 :: Int -> Int
log2 1 = 0
log2 2 = 1
log2 x = 1 + log2 (x `div` 2)
这个任务只用乘法就可以完成吗?在左侧(模式)上使用乘法总是会导致编译器错误。并在右侧使用它,我如何将解决方案追溯到较小的数字?
【问题讨论】:
-
您可以使用加法、乘法和
<=来实现。此外,在该示例中,您对 2 的情况是多余的。 -
除法是乘法
-
但我必须使用
Ints,没有分数。
标签: haskell functional-programming logarithm