Python-尽管返回值是列表,但递归函数不适用于len()

时间:2018-12-11 02:26:11

标签: python

因此,我想创建一个递归函数,该函数以“使用它”或“失去它”的方式起作用,在该函数中,列表使用无限数量的硬币,并计算所需的数量。

所以说你有: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])))

如何不执行此操作就返回列表的长度?而且请没有循环,只有递归,这是考试的复习。

1 个答案:

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