如何在递归调用中存储额外的数量

时间:2015-07-30 19:29:32

标签: python recursion

考虑以下递归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)if2的数量这产生了最小的。

更明显的方法是使用密钥为

的字典
1+f2(a-(b-i), b-i+d, c-(a-i))

,值为

a-(b-i), b-i+d, c-(a-i)

然后我可以找到最小的键值及其值。 但不确定如何在进行递归调用时构建字典。

1 个答案:

答案 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