【发布时间】:2018-11-15 09:25:53
【问题描述】:
在尝试解决以下练习时...
定义函数
binaryDigits,它接收一个整数和 返回以二进制形式写入此类数字所需的位数 代码。
...我发现自己认为不可能通过递归调用函数binaryDigits来解决这个问题,因为它接收的唯一变量是实际数字
我这样说是因为网站声明虽然它运行的测试成功,但我没有在函数 binaryDigits 中使用递归。
如果我什至不知道我调用了多少次,我怎么能想到递归调用这个函数(假设被调用的次数表示表示该数字需要多少二进制数字)。
这是我的想法:请注意,我正在使用递归,但在一个辅助函数中,当该列表的总和大于收到的号码:
double = (2*)
listOfBinaryDigits list num | num > (sum list) = listOfBinaryDigits ([double(head list)]++list) num
| otherwise = list
binaryDigits num = length (listOfBinaryDigits [1] num)
【问题讨论】:
-
153 需要多少位数?现在你需要多少
div 153 10 == 15?还是div 15 10 == 1?或div 1 10 == 0(提示:假设0 本身只需要0 位数字)。