因此,我想创建一个递归函数,该函数以“使用它”或“失去它”的方式起作用,在该函数中,列表使用无限数量的硬币,并计算所需的数量。
所以说你有:change(48,[1、5、10、25、50])它会返回6,因为它将使用25x1、10x2和1x3,总共6个硬币。
def change(value, L):
if not L:
return L
if L[-1] > value:
return change(value, L[:-1])
else:
useIt = [L[-1]] + change(value - L[-1], L)
return useIt
这将返回使用的硬币列表,但是如果我返回len(useIt),则会出现此错误:
TypeError:只能将列表(而不是“ int”)连接到列表
但是,这将返回正确的值:
print(len(change(48, [1, 5, 10, 25, 50])))
如何不执行此操作就返回列表的长度?而且请没有循环,只有递归,这是考试的复习。
答案 0 :(得分:3)
您做得非常出色,只需在 else 部分中将1
替换为[L[-1]]
,并在基本情况中返回0,就可以了完成。
def change(value, L):
if not L:
return 0
if L[-1] > value:
return change(value, L[:-1])
else:
useIt = 1 + change(value - L[-1], L)
return useIt
print(change(48, [1, 5, 10, 25, 50]))