【发布时间】:2016-04-20 19:50:07
【问题描述】:
我为partitioning a number写了一个函数:
var combinations = function (i) {
var mem = [];
function inner(n, r, m) {
for (var k = m; k <= n; k++) {
if (k == n) {
r.push(k);
mem[r] = 1;
return mem;
}
else {
var copy = r.slice(0);
copy.push(k);
inner(n - k, copy, k);
}
}
}
return inner(i, [], 1);
}
在第二步中,我想为这个算法添加一个记忆,但想不出正确的实现方式,因为直到最后都没有 return 语句(当指定 return 时,例如在 faactorial 或 fibbinacci 中我可以添加记忆)。 有人能把我带到正确的方向吗?
[编辑] 我需要这个算法尽可能快。这是 codewars 上的 kata 比赛:link 要求它必须在 6000 毫秒内执行,输入高达 330。 这是我能想到的最好的算法,除了如何存储部分结果。
【问题讨论】:
-
n, r, m代表什么数字? -
您是要计算所有分区还是只计算分区数?
-
@Iszk,请参阅更新的答案。 :-) 我添加了一个解释。
标签: javascript recursion memoization