如何将带有for循环的函数更改为递归函数?

时间:2016-01-31 16:43:44

标签: recursion

我想将此函数更改为具有相同参数的递归函数。 原始代码将给定的更改(此处为3,99为399)转换为用于获取此金额的硬币元组列表。

def make_change(amount):
   M=[200,100,50,20,10,5,2,1]
   W=[]
   for i in range (len(M)):
       m=0
       if amount>=(2*M[i]):
           amount=amount-(2*M[i])
           m+=2
           W.append((M[i],m))
       if amount>=M[i]:
           amount=amount-M[i]
           m+=1
           W.append((M[i],m))
   return W
print make_change(238)

1 个答案:

答案 0 :(得分:0)

这是否符合您的要求?

def make_change(amount):
    def sub(amount, coins):
        if coins:
            coin = coins[0]
            nb_coins  = amount / coin
            if nb_coins:
                return [(coin, nb_coins)] + sub(amount-coin*nb_coins, coins[1:])
            else:
                return sub(amount-coin*nb_coins, coins[1:])
        else:
            return []
    return sub(amount, [200,100,50,20,10,5,2,1])

测试:

>>> print make_change(238) 
[(200, 1), (20, 1), (10, 1), (5, 1), (2, 1), (1, 1)]