【发布时间】:2017-02-20 15:11:13
【问题描述】:
如果给我一个子数组 [1,2,3,4] 和一个值 8。我想返回子数组 [1,3,4]。我的代码中有一个错误,不知道如何修复它,因为我是递归新手。我在下面有我的 Python 代码。我要返回要打印的值 [3,4],这显然不是正确的答案。如何获取数组中的第一个元素?
def main():
s = 0
a = [1,2,3,4] # given array
sa = [] # sub-array
w = 8 # given weight
d = False
d, sa = checkForWeight(a,w,s,d,sa)
print sa
def checkForWeight(a,w,s,d,sa):
l = len(a)
s += a[0]
sa.append(a[0])
if s == w:
d = True
return d, sa
else:
try:
d, sa = checkForWeight(a[1:],w,s,d,sa)
if d != True:
d, sa = checkForWeight(a[2:],w,s,d,sa)
else:
return d, sa
except:
sa = [] # i put this here because I want to erase the incorrect array
return d, sa
【问题讨论】:
-
与您的问题无关:使用值
True和False(布尔值)而不是字符串'True'和'False'。 -
也没有直接关系:您总是使用 a[0] 作为解决方案的一部分。如果解决方案不包含它怎么办?
-
你是对的!当我第一次调用它时,我应该将它添加到我的函数中。
-
除了你哪里出错之外的一些批评。您正在为函数提供许多参数,最好使用带有类或实例变量的类,这样您就没有那么多参数。如果您将变量命名为有意义的东西,您的代码会更清晰,例如调用“w”权重而不是在其旁边添加注释;对于 checkForWeight 的第一个局部变量尤其如此。最好避免使用小写“l”和大写“o”,因为它们很容易与 1 和 0 混淆。
-
还将可变类型(如列表)传递给函数然后更改它们在这里真的很混乱,并且在您的实现中不需要
标签: python recursion sub-array