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

Recursion 如何将带有for循环的函数更改为递归函数?,recursion,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])

我想把这个函数变成一个递归函数,使用相同的参数。 原始代码将给定的变化(这里的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)

这符合你的要求吗

def更改(金额):
def sub(金额、硬币):
如果是硬币:
硬币=硬币[0]
nb_硬币=数量/硬币
如果是nb_硬币:
返回[(硬币,nb_硬币)]+sub(金额硬币*nb_硬币,硬币[1:])
其他:
返回子项(硬币数量*nb_硬币,硬币[1:])
其他:
返回[]
返回子项(金额[200100,50,20,10,5,2,1])
测试:

>打印更改(238)
[(200, 1), (20, 1), (10, 1), (5, 1), (2, 1), (1, 1)]

这是否符合您的要求

def更改(金额):
def sub(金额、硬币):
如果是硬币:
硬币=硬币[0]
nb_硬币=数量/硬币
如果是nb_硬币:
返回[(硬币,nb_硬币)]+sub(金额硬币*nb_硬币,硬币[1:])
其他:
返回子项(硬币数量*nb_硬币,硬币[1:])
其他:
返回[]
返回子项(金额[200100,50,20,10,5,2,1])
测试:

>打印更改(238)
[(200, 1), (20, 1), (10, 1), (5, 1), (2, 1), (1, 1)]

对于递归函数,必须将
make_change
方法调用放在其中一个
if
语句的内部递归性的要点是有一个控制语句,在需要时将调用该方法。检查,但在这种情况下,我仍然需要在M上循环,对吗?即使在递归函数中,我也不理解。据我所知,你的代码是有效的。你需要递归的原因是什么?对于递归函数,你必须把
make\u change
方法调用放在
if
语句中。递归的要点是有一个控制语句,在需要时调用该方法。检查,但在这种情况下,我仍然需要在M上循环,对吗?即使在递归函数中,我也不理解。据我所知,你的代码是有效的。你需要什么递归性?如果这个答案已经解决了你的问题,请通过点击复选标记来考虑。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。如果这个答案已经解决了你的问题,请通过点击复选标记来考虑。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。