首页 > 解决方案 > python memoization的奇怪行为

问题描述

在使用 python memoization 玩 arround 时,我编写了以下代码。

def can_sum_rec(target, nums):
    if target < 0:
        return False
    if target == 0:
        return True
    for i in nums:
        if can_sum_rec(target - i, nums):
            return True
    return False

def can_sum_mem(target, nums, mem={}):
    if target in mem:
        return mem[target]
    if target < 0:
        return False
    if target == 0:
        return True
    for i in nums:
        if can_sum_mem(target - i, nums, mem):
            mem[target] = True
            return True
    mem[target] = False
    return False

但是,我得到了一些令人困惑的测试结果。

tests = [(7, [3, 2]), (7, [2, 4]), (7, [5, 4, 7, 3]), (8, [2, 3, 5])]
for target, nums in tests:
    print(can_sum_mem(target, nums))

真真真真

显然,2 和 4 之和不能等于 7。但是,当分别测试案例时,结果很好。

tests = [(7, [2, 4])]
for target, nums in tests:
    print(can_sum_mem(target, nums))

错误的

我似乎找不到任何全局变量。因此,如果有人能在这里指出这个问题,我将不胜感激。

标签: pythondynamic-programming

解决方案


推荐阅读