我正在编写一种贪婪算法,该算法采用递归方法来计算有多少硬币以及每种硬币面额用于根据找零金额进行找零。
我在使用递归方法时遇到了问题,因为它不返回任何数据,我想问题出在我的递归对象使用范围内。我没有包括它,但是,我已经有了正确的获取和设置方法。 在第一种方法中,我仅使用迭代来解决问题,但是当我运行第二种方法(使用递归)时,我没有成功。
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)
答案 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