gpt4 book ai didi

python - 找到解决方案后退出递归调用树

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:26 27 4
gpt4 key购买 nike

我有这个问题,给定一组数字 S 和一个数字 N 找到一些数字 S 的组合,总和为 N 使得解决方案使用最少的数字。即最小化|解决方案|

例如,假设 S = {1000, 500, 250, 100},A = 900,则解 = {500, 100, 100, 100, 100}

这是我的尝试

numbers = [1000, 500, 250, 100]
amount = 900

def solve(numbers, amount, sum, solution):
for num in numbers:
if sum + num <= amount:
if sum + num == amount:
print(solution + [num])
return
solve(numbers, amount, sum + num, solution + [num])

solve(numbers, amount, 0, [])

而且有效!有点,我得到了正确的答案,它总是我打印的第一个值(因为我确保这组数字是按降序排列的)。但是该算法继续打印所有其他正确答案(这里正确的意思是总而言之不最小化 |Solution|)

[500, 100, 100, 100, 100] [250, 250, 100, 100, 100, 100] [250, 100, 250, 100, 100, 100] [250, 100, 100, 250, 100, 100] [250, 100, 100, 100, 250, 100] [250, 100, 100, 100, 100, 250]

等等

当我找到第一个答案时,如何退出该算法?

最佳答案

因为您没有使用返回值:

numbers = [1000, 500, 250, 100]
amount = 900
def solve(numbers, amount, sum, solution):
for num in numbers:
if sum + num <= amount:
if sum + num == amount:
print(solution + [num])
return True
if solve(numbers, amount, sum + num, solution + [num]):
return True
return False

solve(numbers, amount, 0, [])

关于python - 找到解决方案后退出递归调用树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52028047/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com