При попытке выполнить следующее упражнение ...
Определите функцию binaryDigits
, которая получает целое число и возвращает количество цифр, необходимое для записи такого числа в двоичном коде.
... Я подумал, что невозможно решить эту проблему путем рекурсивного вызова функции binaryDigits
, потому что единственная переменная, которую она получает, - это действительное число
Я говорю это, потому чтовеб-сайт утверждает, что хотя выполняемые им тесты были успешными, я не использовал рекурсию в функции binaryDigits
.
, так как я мог даже подумать о рекурсивном вызове этой функции, если я даже не могу сказать, какя много раз звонил (и давайте скажем, что количество вызываемых звонков представляет, сколько двоичных цифр требуется для представления этого числа).
Это то, что я подумал: обратите внимание, что I 'm с использованием рекурсии, но во вспомогательной функции, которая возвращает список десятичных значений, которые двоичные цифры представляют , когда сумма этого списка равна gповторить полученный номер:
double = (2*)
listOfBinaryDigits list num | num > (sum list) = listOfBinaryDigits ([double(head list)]++list) num
| otherwise = list
binaryDigits num = length (listOfBinaryDigits [1] num)