擅长:python、mysql、java
<p>我试图用评论来解释:</p>
<pre><code>def howSum(targetSum, numbers, memo = {}):
# if the result is calculated
# already (in the past) then
# use it
if targetSum in memo : return memo[targetSum]
# return pre-defined values
# to out-of-bound parameters
if targetSum == 0 : return []
if targetSum < 0 : return None
# otherwise make the calculation
for num in numbers:
remainder = targetSum - num
remainderResult = howSum(remainder, numbers, memo)
if remainderResult != None:
# if there is a result (which is not
# None) then store it for later
# (to memoize it)
memo[targetSum] = [*remainderResult, num]
return memo[targetSum]
memo[targetSum] = None
return None
</code></pre>
<p>有关更具Python风格的备忘录,请参见<a href="https://stackoverflow.com/questions/1988804/what-is-memoization-and-how-can-i-use-it-in-python">this answer</a></p>