我正在尝试使用 python 解决算术难题。该函数f接受一个target数字和一个列表numbers。如果它可以在数字列表中插入加法或减法运算以获得目标数字,则返回 true。否则,它返回 false。
例如:
f(10, [1, 2]) = false. There's no way to add or subtract 1 and 2 to get 10.
f(2, [1, 2, 3, 4]) = true. 1 + 2 + 3 - 4 = 2.
f(0, []) = true
f(1, []) = false
f(1, [1]) = true
f(0, [1]) = false
到目前为止我有以下代码
def f(target, numbers):
if len(numbers) == 0:
if target == 0:
return True
else:
return False
elif len(numbers) == 1:
if target == numbers[0]:
return True
else:
return False
else:
helper (target, numbers, 0, 0)
def helper (target, numbers, index, total):
if index==len(numbers):
if target == total:
print("got it")
return True
else:
return False
else:
curr = total+numbers[index]
print(index, curr)
helper (target, numbers, index+1, curr)
curr = total-numbers[index]
print(index, curr)
helper (target, numbers, index+1, curr)
问题是即使找到匹配项,它也不会返回True。这是因为当它找到匹配项时,它会从该递归阶段返回 true,然后返回调用者并调用下一个递归。
我该如何解决这个问题?有什么建议吗?