<p>我对代码库做了一些更改并添加了一些注释,但我保留了大部分注释:</p>
<pre class="lang-py prettyprint-override"><code>def bestsum(sum, numbers, memo={}):
if sum == 0:
return []
elif sum < 0:
return False
else:
if sum not in memo:
for number in numbers:
remainder = sum - number
shortest_combination = bestsum(remainder, numbers, memo)
if shortest_combination != False:
# Good news! We found a valid path from `sum` to the end
if (
sum not in memo
or len(memo[sum]) > len(shortest_combination) + 1
):
# Either there's no entry in memo for `sum` yet
# Or we've found a better subpath than the current one
currently_best_combination = shortest_combination.copy()
currently_best_combination.insert(0, number)
memo[sum] = currently_best_combination
if sum in memo:
# Return value if we've found a valid path
return memo[sum]
else:
# Return false if not
return False
else:
# If sum is already in `memo`, it's already the optimal way
return memo[sum]
</code></pre>
<pre><code>numbers = [2, 3, 5]
print(bestsum(10, numbers))
# [5, 5]
numbers = [2, 3, 5]
print(bestsum(0, numbers))
# []
numbers = [3]
print(bestsum(10, numbers))
# False
</code></pre>