递归方法不返回任何内容

时间:2019-08-20 23:04:45

标签: java recursion netbeans greedy

我正在编写一种贪婪算法,该算法采用递归方法来计算有多少硬币以及每种硬币面额用于根据找零金额进行找零。

我在使用递归方法时遇到了问题,因为它不返回任何数据,我想问题出在我的递归对象使用范围内。我没有包括它,但是,我已经有了正确的获取和设置方法。 在第一种方法中,我仅使用迭代来解决问题,但是当我运行第二种方法(使用递归)时,我没有成功。

public class GreedyAlgorithmPlatzi {

    public static void main(String[] args) {
        Change change = new Change();
        //Method (1)
        System.out.println("USING ITERATIVE METHOD");
        System.out.println(change.greedyChange(35));

        //Method (2)
        System.out.println("USING RECURSIVE METHOD");
        System.out.println(change.greedyRecursivo(35,change.getCoinSet().length));

    }

    static class Change {

        int change, cant20 = 0, cant10 = 0, cant5 = 0, cant1 = 0;
        int coinSet[] = {1, 5, 10, 20};

        //THIS METHOD(1) (ITERATIVELY) returns the amount of coins and //its denominations used to give change, accordingly to the change //parameter
        Change greedyChange(int cambio) {
            Change ch = new Change();
            int num;
            int monedas = 0;
            for (int i = 3; i > -1; i--) {
                num = cambio / this.coinSet[i];
                if (num > 0) {
                    monedas += num;
                    cambio -= (num * this.coinSet[i]);
                    switch (this.coinSet[i]) {
                        case 20:
                            cant20 += monedas;
                            ch.setCant20(cant20);
                            break;
                        case 10:
                            cant10 += monedas - cant20;
                            ch.setCant10(cant10);
                            break;
                        case 5:
                            cant5 += monedas - cant20 - cant10;
                            ch.setCant5(cant5);
                            break;
                        case 1:
                            cant1 += monedas - cant20 - cant10 - cant5;
                            ch.setCant1(cant1);
                            break;
                    }
                }
            }
            ch.setChange(monedas);
            return ch;
        }

        //THIS METHOD(2) (RECURSIVELY) returns the amount of coins and its denominations used to give change, accordingly to the change parameter
        Change greedyRecursivo(int change,int size) {
            Change chan = new Change();
            chan.setChange(change);
            if (chan.getChange() == 0 || chan.getChange() < 0) {
                chan.setChange(0);
                return chan;
            }

            int numMonedas = 0, numTotal = 0;

            numTotal = (chan.getChange() / this.coinSet[size - 1]);

            if (numTotal > 0) {
                numMonedas += numTotal;
                change -= (numTotal * this.coinSet[size - 1]);
                chan.setChange(change);
                switch (this.coinSet[size - 1]) {
                    case 20:
                        this.cant20 += numMonedas;
                        chan.setCant20(cant20);
                        break;
                    case 10:
                        this.cant10 += numMonedas;
                        chan.setCant10(cant10);
                        break;
                    case 5:
                        this.cant5 += numMonedas;
                        chan.setCant5(cant5);
                        break;
                    case 1:
                        this.cant1 += numMonedas;
                        chan.setCant1(cant1);
                        break;
                }
            }

            chan =  greedyRecursivo(chan.getChange(),size - 1);

            return chan;
        }

        @Override
        public String toString() {
            return "Amount of coins used: "
                     + change + ", " + cant20 + " of $20" + ", " + cant10 + " of $10"
                    + ", " + cant5 + " of $5" + ", " + cant1 + " of $1";
        }

这就是我得到的:
使用迭代方法 所使用的硬币数量:3,1 of $ 20,1 of $ 10,1 of $ 5,0 of $ 1。
使用递归方法
使用的硬币数量:0,0 of $ 20,0 of $ 10,0 of $ 5,0 of $ 1

我应该得到的是: 使用迭代方法 所使用的硬币数量:3,1 of $ 20,1 of $ 10,1 of $ 5,0 of $ 1 使用递归方法 所使用的硬币数量:3、1(共$ 20),1(共10),1(共5),0(共1)

1 个答案:

答案 0 :(得分:0)

这是我发现的问题的解决方案:将方法更改为插入对象类型的void类型,并且效果很好。

HTTP Status 404 - /Linxer_war_exploded/ud/signup/Register
type Status report

message /Linxer_war_exploded/ud/signup/Register

description The requested resource is not available.

Apache Tomcat/9.0.0.M9