使用递归的算术Boggle

时间:2018-09-13 04:27:47

标签: algorithm recursion

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

如何解决此问题?有什么建议吗?

0 个答案:

没有答案