首页 > 解决方案 > Python - 尽管返回值是列表,但递归函数不适用于 len()

问题描述

所以我想创建一个递归函数,在使用它或失去它的意义上起作用,它通过列表使用无限数量的硬币,并计算所需的数量。

假设你有: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])))

如何在不这样做的情况下返回列表的长度?请不要循环,只有递归,这是考试复习。

标签: python

解决方案


您已经完成了出色的工作,只需放置1else部分并在基本情况下返回[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]))

推荐阅读