python - 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))
错误的
我似乎找不到任何全局变量。因此,如果有人能在这里指出这个问题,我将不胜感激。
解决方案
推荐阅读
- react-native - 如何在本机反应中将差异日期格式分配给其他?
- angular - 如何更新嵌套的可观察角度 9?
- node.js - 尝试保存数据库但是当我在 Postman 上测试 api 时出现错误
- python - 每当“chromedriver”不是活动窗口时,Selenium 就会搞砸
- postgresql - 我试图将 postgresql md5 更改为 scram-sha-256 并且我得到 FATAL 密码身份验证失败
- java - 正则表达式识别Java中括号之间的表达式
- javascript - 无法获取 jQuery 中动态生成的按钮的数据属性值
- java - ConcurrentHashMap 中的 put() 方法也是原子的吗?
- typescript - 无效选项:模块不是有效的顶级选项
- spring - Gradle没有创建可行的jar