Для этого вопроса мне нужно написать метод, при котором, когда пользователь вкладывает денежную сумму в копейки, я должен выводить все возможные комбинации с копейками, никелями и копейками в формате String. Я могу использовать только рекурсию и никакой тип циклов или коллекций (т.е. массивы, списки, стеки и т. Д. c). Этот код должен работать, но по какой-то причине он не выводит все комбинации, в нем отсутствуют: «0d 3n 7p» и «0d 0n 17p».
package Assignement02;
public class Coins {
public static String ways (int money) {
System.out.println("Enter an amount in cents:");
System.out.println(money);
System.out.println("This amount can be changed in the following ways:");
if(money == 0) {
return "there are no ways to change that amount";
} else {
return waysHelper(0, 0, 0, money);
}
}
public static String waysHelper(int countd, int countn, int countp, int money) {
if(money >= 10) {
countd++;
return waysHelper(countd, countn, countp, money - 10);
} else if (money >= 5) {
countn++;
return waysHelper(countd, countn, countp, money - 5);
} else {
String s = " " + countd + "d, " + countn + "n, " + money + "p";
int orig = 10*countd + 5*countn + money;
return counterHelper(orig, countd, countn, money, s);
}
}
public static String counterHelper(int money, int countd, int countn, int countp, String s) {
if(countp == money) {
s = s + s + "\n " + countd + "d, " + countn + "n, " + countp + "p";
}
if(countd > 0) {
if(countn > 0) {
countn--;
countp = countp + 5;
s = s + "\n " + countd + "d, " + countn + "n, " + countp + "p";
counterHelper(money, countd, countn, countp, s);
}
countd--;
countn = countn + 2;
s = s + "\n " + countd + "d, " + countn + "n, " + countp + "p";
counterHelper(money, countd, countn, countp, s);
}
if(countn > 0) {
countn--;
countp = countp + 5;
s = s + "\n " + countd + "d, " + countn + "n, " + countp + "p";
counterHelper(money, countd, countn, countp, s);
}
if(countn > 0) {
countn--;
countp = countp + 5;
s = s + "\n " + countd + "d, " + countn + "n, " + countp + "p";
counterHelper(money, countd, countn, countp, s);
}
return s;
}
public static void main(String[] args) {
System.out.print(ways(17));
}
}
Выход:
Enter сумма в центах: 17 Эта сумма может быть изменена следующими способами: 1d, 1n, 2p 1d, 0n, 7p 0d, 2n, 7p 0d, 1n, 12p 0d, 0n, 17p