Готовясь к экзамену, я только что нашел следующую задачу в упражнении:
Напишите функцию, которая вычисляет целочисленный логарифм по основанию 2 (с округлением вверх), используя только умножение и сложение.
Я попытался сразу же, но не смог прийти к какому-либо решению. Я думал, что это будет простая задача, но я смог найти решение только при использовании целочисленного деления (например, в Haskell):
log2 :: Int -> Int
log2 1 = 0
log2 2 = 1
log2 x = 1 + log2 (x `div` 2)
Возможна ли вообще эта задача только с умножением? Использование умножения в левой части (шаблон) всегда приводит к ошибкам компилятора. И, используя его с правой стороны, как я могу отследить решение до меньших чисел?
<=
. Кроме того, ваш случай для 2 является избыточным в этом примере. - person Carl   schedule 11.01.2013Int
s, без дробей. - person caw   schedule 11.01.2013