我必须编写一个递归函数,它在10个基数中得到一个数字(n)并将其转换为给定的数字基数(k)并返回一个列表,其中的组件是最终的数字位数,例如{{1} }必须结果f(5, 3)
基数3中的5为12,或[1, 2]
必须为f(22, 3)
。
这是我尝试过的代码:
[2, 1, 1]
实际上我对它有很多想法,但由于我不太擅长编写代码,所以我无法继续下去。感谢您对我的代码的帮助和修改。
答案 0 :(得分:7)
如果您考虑递归,基本情况是答案为b = cb(a,k) + b
的{{1}},并且n < k
的最后一位数是n
因此,隐瞒案件为n
。
代码如下所示:
n%k
答案 1 :(得分:2)
你非常接近,你唯一需要做的就是改变:
else:
cb(a, k)
为:
else:
b.extend(cb(a, k))
但是,您的输出将是:
>>> cb(22, 3)
[1, 1, 2]
这与你想要的相反,因为基数3中的22是211
。您可以通过撤消列表[1,1,2][::-1] == [2,1,1]
或将所有来电替换为append
以及将新呼叫更改为extend
来解决此问题,而是在列表的开头添加:{{1} }或b.insert(0,element)
答案 2 :(得分:1)
最大的问题是你没有对递归调用的结果做任何事情,所以他们永远不会进入你的列表。我认为你也太复杂了。这样的事情应该有效:
var datas = getmyJson('/GetServices/JsonDataSvc');
var parser = function (datas) {
var stats = {};
for (var d in datas) {
stats[datas[d].date] = datas[d].value;
}
//console.log("Data after parse", stats);
return stats;
};
我想如果你不做最后一部分,那么你总是得到前面的0?您还可以通过测试来进一步简化它,看它是否小于基数,从而提供更简单的解决方案
var cal = new CalHeatMap();
cal.init({
itemSelector: "#cal-heatmap",
domain: "year",
subDomain: "month",
data: datas,
afterLoadData: parser,
start: new Date(2015, 1, 1),
cellSize: 15,
},
legend: [10, 20, 30, 40],
legendColors: ["#ecf5e2", "#232181"]
});