【发布时间】:2019-01-07 14:32:55
【问题描述】:
我正在研究递归逻辑,其中一个问题是子集和。 AFAI读取,递归运行时有重叠。但是,我不知道是怎么回事。另外,我读到它是为了克服可以使用 DP 的问题,但我想了解 递归如何克服这个问题。你能想象一个重叠的例子吗?
伪代码,
def hasSum( array, start, sum):
if sum == 0:
return true
if start > array.length - 1:
return false;
return hasSum(array, start + 1, sum - array[start])
or hasSum(array, start + 1, sum)
我无法将逻辑与下图联系起来,我肯定忽略了一个点/点。
【问题讨论】:
-
[1, 3, 1, 8] -> 您最终将使用第一个 1 和 3,然后不使用第二个 1,总和为 4。在另一种情况下,您将只使用第二个 1和 3 所以你最终也会以不同的方式得到 4 的总和。只有当另一种情况有解决方案时,其中一种情况才有解决方案,因此重叠
-
代码中的逻辑与图片不符
-
@dheiberg 貌似,我不是唯一一个难以正确理解递归的学生。感谢您的评论让我感觉好多了。
-
如果您的数组是 [1,2,3],则图片很好。在每个步骤中,您决定是否将当前元素添加到总和中,在图像中而不是总和中,它显示为总和添加的元素。你最终得到了每一个可能的子集,这意味着对每一个可能的子集求和。当您最终在同一索引处保留相同的总和时,就会产生重叠。
-
@juvian 我不明白 当您最终在同一索引处保留相同的总和时会产生重叠。 案例。你能说得清楚一点吗?
标签: python algorithm recursion recurrence