繁体   English   中英

子集和递归重叠的困境

[英]Subset sum overlapping dilemma recursively

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

我无法将逻辑与下图联系起来,我当然忽略了一点/点。

在此处输入图片说明

这里有这条线造成的重叠:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM