我有一个问题,想要找到列表子集的总和为特定值的方式数。但是,如果我手动运行递归公式,我会得到一个与 python 代码不同的(正确的)值。我错过了什么,或者为什么我得到不同的结果?
假设我有一个列表b = [2,3,2,1,4],目标值为T = 5. 然后将有 4 个子集与目标值相加:
{b[0], b[1]}
{b[0], b[2], b[3]}
{b[4], b[3]}
{b[1], b[2]}
以下代码给出的结果为 2,但我希望它返回 4。
b = [2,3,2,1,4]
def subset_sum(T, idx):
if T < 0 or idx< 0:
return 0
if T == 0:
return 1
else:
return subset_sum(T, idx-1) + subset_sum(T-b[idx], idx-1)
if __name__ == "__main__":
print(subset_sum(5, 4))
基于@TomDalton 评论进行编辑:我尝试了这个并认为这可能是因为两个 if 语句没有同时检查 - 因此在 idx = 0 并且我们从值 T 中减去 b[0] 的情况下,然后在下一次迭代中它将返回 0,因为它在检查 T == 0 之前检查 idx < 0。虽然我不确定我的猜测的有效性
慕工程0101907
墨色风雨
慕哥6287543
相关分类