使用递归分解量

时间:2018-12-19 18:43:31

标签: python python-3.x list

给出数组

bills = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]

要求编写一个函数decompose(),该函数将分解数组中包含的钞票金额。


例如decompose(423)将返回包含以下元素的列表

[200, 200, 20, 1, 1, 1]

这是我的代码:

bills = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]

def decompose(amount, lst = []):
    if len(bills) == 1:
        return lst

    if amount > bills[0]:
        lst += [bills[0]]
        amount = amount - bills[0]
        return decompose(bills, lst + [bills[0]])
    return decompose(bills[1:], lst + [bills[0]]) 

print(decompose(523)) 

我的输出是:

Traceback (most recent call last):
  File "test.py", line 94, in <module>
    print(decompose(523)) 
  File "test.py", line 91, in decompose
    return decompose(bills, lst + [bills[0]])
  File "test.py", line 88, in decompose
    if amount > bills[0]:
TypeError: '>' not supported between instances of 'list' and 'int'

我如何分解我的金额?

2 个答案:

答案 0 :(得分:4)

当最上面的账单适合该金额时,您应该从该金额中递归扣除账单价值,或者递归地移至下一个账单,同时保持相同的金额:

def decompose(amount, bills):
    if not bills:
        return []
    if amount >= bills[0]:
        return [bills[0]] + decompose(amount - bills[0], bills)
    else:
        return decompose(amount, bills[1:])

这样:

bills = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
decompose(423, bills)

返回:

[200, 200, 20, 2, 1]

答案 1 :(得分:0)

您尝试提供bills来代替当前的amount-因此,稍后您会收到错误消息,因为您无法为amount >= bills[0]和{ {1}}。

您的代码中还有其他几个错误:

list

输出:

int

您可能想研究一下调试:https://wiki.python.org/moin/PythonDebuggingTools逐步检查代码将极大地帮助您-经过一段时间后,您将为这样的小代码块开发内部调试器; o)