我正在尝试使用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,然后返回到调用方并调用下一个递归。
如何解决此问题?有什么建议吗?