微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将硬币数量转换为四分之一、一角硬币、镍币、便士的递归函数

如何解决将硬币数量转换为四分之一、一角硬币、镍币、便士的递归函数

我有一个小项目,可以将一定数量的硬币转换成它们各自的四分之一、一角硬币、镍币和一分硬币的数量。基本思想是这样的:

public static void coinCombo() {
    int amount = getInt();
    int quarter_cnt = amount/QUARTER;
    int r1 = amount%QUARTER;
    int dime_cnt = r1/DIME;
    int r2 = r1%DIME;
    int nickel_cnt = r2/NICKEL;
    int r3 = r2%NICKEL;
    System.out.println("Quarters: " + quarter_cnt);
    System.out.println("Dimes: " + dime_cnt);
    System.out.println("Nickels: " + nickel_cnt);
    System.out.println("Pennies: " + r3);
}

然而,这对我来说看起来相当笨重。我想知道如何递归地做到这一点。我看到我使用上一个操作的剩余部分来获取一个操作。我觉得这可以做得更简洁。有人可以提供一个递归方式的例子吗?

解决方法

我会这样做。


static final int[] den = {25,10,5,1};
static final String[] names = {"Quarters","Dimes","Nickels","Pennies"};

public static void coinCombo(int amount) {
     for (int i = 0; i < den.length; i++) {
         System.out.printf("%s: %d%n",names[i],amount/den[i]);
         amount %= den[i];
     }
}

coinCombo(119);

印刷品

Quarters: 4
Dimes: 1
Nickels: 1
Pennies: 4

请注意,上述内容可以轻松修改为包括更大面额的钞票($10$5$1 钞票)。

但这是您的递归解决方案。还需要一个论据。

coinCombo(232,0);

public static void coinCombo(int amount,int i) {
    if (amount > 0) {
        System.out.printf("%s: %d%n",amount/den[i]); 
        coinCombo(amount % den[i],i+1);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。