我正在研究递归逻辑,问题之一是子集和。 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)
我无法将逻辑与下图相关联,我当然忽略了一个点。
答案 0 :(得分:0)
此行在此处引起重叠:
return hasSum(array, start + 1, sum - array[start])
or hasSum(array, start + 1, sum)
如果算法在第一个hasSum
中找不到有效条件(由于递归,到那时为止已经遍历整个数组,则返回到这一点),它将在第二个条件下再次尝试hasSum
会忽略此当前索引的值。这意味着该算法会多次检查相同的索引。