如何使它成为递归?

时间:2018-10-25 03:56:32

标签: python python-2.7 recursion

我试图在现金上进行value循环,但是我所有的尝试都失败了,这肯定需要递归,但是我似乎无法正确地应用它。

r = {"pound":1.00,"cent":0.01,"quarter":.25,"five":5.00}
m = []
for a in r:
    m.append(r[a])
m = sorted(m, reverse=True)

def exchange(cash):
    c = []
    for value in m:
        if value > cash:
            break
        if value <= cash:
            c.append(value)
            cash = cash - value
        return cash

主要问题是,它通常只经过四个value,就这样,我正在尝试使其在更高的value s上重复一次,直到value>cash

我的第一个想法是将其放在最后一个条件下

if value <= cash:
    c.append(value)
    cash = exchange(cash -value)

但是没有按计划工作

现金:print exchange(20.0)print exchange(3.0)

主要目的是计算我正在尝试使用c

的钞票类型

最终结果应该是0,但我现在None

1 个答案:

答案 0 :(得分:1)

这里是一个如何使用递归实现的示例,方法是仅将当前cash的余数除以最接近的value到下一个递归:

r = {"pound":1.00,"cent":0.01,"quarter":.25,"five":5.00}
m = sorted(r.items(), key=lambda t: -t[1])
def exchange(cash):
    for name, value in m:
        if value <= cash:
            return dict([(name, int(cash / value))] + exchange(cash % value).items())
    else:
        return {}
print exchange(21.8)

这将输出:

{'pound': 1, 'quarter': 3, 'five': 4, 'cent': 5}