0

我正在尝试使用 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,然后返回调用者并调用下一个递归。

我该如何解决这个问题?有什么建议吗?

4

0 回答 0