假设我们有一组:{1,2,...,n}。 有多少个阶R的子集存在S = {a_i1,a_i2,... a_iR},它们总和到一定数量S ?.这个问题的递归是什么?
答案 0 :(得分:0)
只需定义解决原始问题的方法。它收到的参数是:
并返回组合数。
要实现此方法,首先我们必须检查是否可以发出此请求。如果出现以下情况,则无法完成任务:
n + (n-1) + ... + (n-R+1) < S => R*((n-R) + (R+1)/2) < S
之后,尝试更大元素的所有可能性就足够了。在python风格中,它应该实现如下:
def combinations(n, R, S):
if R > n or R*((n-R) + (R+1)/2) < S:
return 0
c = 0
for i in xrange(R, n+1): # try i as maximal element in subset. It can go from R to n
# recursion n is i-1, since i is already used
# recursion R is R-1, since we put i in a set
# recursion S is S-i, since i is added to a set and we are looking for sum without it
c += combinations(i-1, R-1, S-i)
return c