子集和重叠难题递归

时间:2019-01-07 14:32:56

标签: python algorithm recursion recurrence

我正在研究递归逻辑,问题之一是子集和。 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)

我无法将逻辑与下图相关联,我当然忽略了一个点。

enter image description here

1 个答案:

答案 0 :(得分:0)

此行在此处引起重叠:

return hasSum(array, start + 1, sum - array[start])
           or hasSum(array, start + 1, sum)

如果算法在第一个hasSum中找不到有效条件(由于递归,到那时为止已经遍历整个数组,则返回到这一点),它将在第二个条件下再次尝试hasSum会忽略此当前索引的值。这意味着该算法会多次检查相同的索引。