考虑以下递归python代码来计算一些最小值
global d
def f1(a,b):
if b<=0:
return 0
if a<=0:
return 99999
return 1+f1(a-(b-a),b-a)
def f2(a,b,c):
if a<=0:
return 99999
if c<=0:
return f1(a,b-d)
minimum = 99999
for i in range(a):
if i>c:
break
minimum = min(minimum,1+f2(a-(b-i),b-i+d,c-(a-i)))
return minimum
def f3(a,b,c):
global d
d = c
ret = f2(a,0,b)
return ret
我想更改它,以便它不仅返回最小值,还返回a-(b-i)
b-i+d
循环中c-(a-i)
,i
和f2
的数量这产生了最小的。
更明显的方法是使用密钥为
的字典1+f2(a-(b-i), b-i+d, c-(a-i))
,值为
a-(b-i), b-i+d, c-(a-i)
然后我可以找到最小的键值及其值。 但不确定如何在进行递归调用时构建字典。
答案 0 :(得分:1)
您可以重写f2
以获得所需的结果:
def f2(a,b,c):
if a<=0:
return 99999
if c<=0:
return f1(a,b-d)
minimum = 99999
max_iter = min(a,c)
for i in range(max_iter):
# replace *_ with qty1, qt2, qty3 if you want to do something with the returned values at this stage
mini, *_ = f2(a-(b-i),b-i+d,c-(a-i))
minimum = min(minimum, 1 + mini)
return minimum, a - b + max_iter, b - max_iter + d, c - a + max_iter
您可能还需要相应地调整f3
。