Python 受先前调用困境影响的函数调用
Python function call affected by previous call dilemma
我在学习动态规划时遇到了一个奇怪的问题,即函数调用受到先前使用不同参数调用函数的影响
def bestSum(target, numbers,memo={} ):
if target in memo:
return memo[target]
if target == 0:
return []
if target < 0:
return None
shortest = None
for num in numbers:
remainder = target - num
result = bestSum(remainder, numbers,memo)
if(result is not None):
result.append(num)
combination = result
if shortest is None or len(result) < len(shortest):
shortest = combination
memo[target] = shortest
return shortest
#print (bestSum(300,[8,14]))
#print (bestSum(8,[2,3,5]))
print (bestSum(10, [2,5,25]))
当 运行 打印最后一条打印语句并打印出最佳数组 [5,5] 时,上面的代码可以完美执行,但是当我尝试 运行 最后两行时,它会受到影响通过上面输出 [3,5] 并打印 [5,3,3,2] 的行,这里可能是瓶颈,是否需要执行任何“刷新”操作?
您需要做的是将函数的开始更改为以下内容:
def bestSum(target, numbers,memo=None ):
if memo is None:
memo = {}
这可以防止 memo
在未显式传递时在函数调用之间意外共享。
我在学习动态规划时遇到了一个奇怪的问题,即函数调用受到先前使用不同参数调用函数的影响
def bestSum(target, numbers,memo={} ):
if target in memo:
return memo[target]
if target == 0:
return []
if target < 0:
return None
shortest = None
for num in numbers:
remainder = target - num
result = bestSum(remainder, numbers,memo)
if(result is not None):
result.append(num)
combination = result
if shortest is None or len(result) < len(shortest):
shortest = combination
memo[target] = shortest
return shortest
#print (bestSum(300,[8,14]))
#print (bestSum(8,[2,3,5]))
print (bestSum(10, [2,5,25]))
当 运行 打印最后一条打印语句并打印出最佳数组 [5,5] 时,上面的代码可以完美执行,但是当我尝试 运行 最后两行时,它会受到影响通过上面输出 [3,5] 并打印 [5,3,3,2] 的行,这里可能是瓶颈,是否需要执行任何“刷新”操作?
您需要做的是将函数的开始更改为以下内容:
def bestSum(target, numbers,memo=None ):
if memo is None:
memo = {}
这可以防止 memo
在未显式传递时在函数调用之间意外共享。