我想计算数组A = [2, 1, 1, 4]的子集的个数,其和为2.有两种方式:(A[0])(A[1], A[2]).我的计算代码是:

 def W(number, index):
     A = [2, 1, 1, 4]
     if number < 0 or index < 0:
          return 0
     elif number==0:
          return 1
     else: 
          return W(number, index-1) + W(number - A[index], index)

现在,当我用W(2,3)调用函数时,得到的是4,而不是2.我的问题是,我的代码还计算了可能性(A[1], A[1])(A[2], A[2]).在仍然使用递归的情况下,有没有办法修复它?

推荐答案

拨打W(number - A[index], index)应该是W(number - A[index], index - 1);否则,允许重复计算子集和中的一个元素.

下面是修复此问题的代码片段.对于每个元素,我们决定是否将其添加到总和中.如果元素允许我们的目标达到0,我们将1添加到可能性总数中,然后递归查看是否有任何其他方法可以在不添加当前正在判断的元素的情况下达到目标:

A = [2, 1, 1, 4]

def W(number, index):
     if number < 0 or index < 0 :
          return 0
     elif number - A[index] == 0:
         return 1 + W(number, index - 1)
     else: 
          return W(number, index - 1) + W(number - A[index], index - 1)
          
print(W(1, 3)) # Prints 2

Python相关问答推荐

aiohTTP与pytest的奇怪行为

使用unmanagedexports从Python调用的c#DLC

使用Python从HTTP打印值

如何在telegram 机器人中发送音频?

使用Python Great Expectations和python-oracledb

了解shuffle在NP.random.Generator.choice()中的作用

如何使用entry.bind(FocusIn,self.Method_calling)用于使用网格/列表创建的收件箱

使用GEKKO在简单DTE系统中进行一致初始化

如何根据另一列值用字典中的值替换列值

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

Pandas 在最近的日期合并,考虑到破产

对某些列的总数进行民意调查,但不单独列出每列

需要计算60,000个坐标之间的距离

输出中带有南的亚麻神经网络

如何访问所有文件,例如环境变量

Pandas Loc Select 到NaN和值列表

当点击tkinter菜单而不是菜单选项时,如何执行命令?

Flask Jinja2如果语句总是计算为false&

在pandas/python中计数嵌套类别

交替字符串位置的正则表达式