编写一个函数canSum(targetSum, numbers)
,它接受一个targetSum和一个数字数组作为参数。
该函数应该返回一个布尔值,指示是否可以使用数组中的数字生成targetSum。
动态程序
您可以根据需要多次使用数组的元素。
您可以假设所有输入数字都是非负的。
代码:
def canSum(targetsum,numbers,memo={}):
if targetsum in memo:
return memo[targetsum]
if targetsum==0:
return True
if targetsum<0:
return False
for num in numbers:
remainder=targetsum-num
if (canSum(remainder,numbers,memo)==True):
memo[targetsum]=True
return True
memo[targetsum]=True
return False
print(canSum(7,[2,3]))
print(canSum(7,[5,3,4,7]))
print(canSum(7,[2,4]))
print(canSum(8,[2,3,5]))
print(canSum(300,[7,14]))
如果我称这些函数为真,它们都只打印为真。
但实际产出是
true
true
false
true
false
请帮我解决这个问题
发布于 2022-09-04 20:27:27
这是一个典型的错误,参见"Least Astonishment" and the Mutable Default Argument。大纲:不要使用可变的默认参数。您的固定版本可能如下所示(+我稍微重构了一下):
def canSum(targetsum, numbers, memo=None):
if memo is None:
memo = {}
if targetsum in memo:
return memo[targetsum]
if targetsum < 0:
return False
if targetsum == 0:
return True
for num in numbers:
remainder = targetsum - num
res = memo[targetsum] = canSum(remainder, numbers, memo)
if res:
return res
return memo[targetsum]
print(canSum(7, [2, 3]))
print(canSum(7, [5, 3, 4, 7]))
print(canSum(7, [2, 4]))
print(canSum(8, [2, 3, 5]))
print(canSum(300, [7, 14]))
输出:
True
True
False
True
False
https://stackoverflow.com/questions/73602548
复制相似问题