Algorithm 使用递归打印所有可能的对以更改货币

Algorithm 使用递归打印所有可能的对以更改货币,algorithm,recursion,Algorithm,Recursion,我提出了这个递归的解决方案,来找到最小数量的硬币,以改变给定货币的一组硬币面额。它工作得很好,但我想扩展这个算法,以打印所有可能的方式来改变钱,但我不能 这是我的密码: static HashMap <Integer,Integer> map = new HashMap<>(); public static void main(String [] args) { int money=75,coins [] = {1,5,6}; System.ou

我提出了这个递归的解决方案,来找到最小数量的硬币,以改变给定货币的一组硬币面额。它工作得很好,但我想扩展这个算法,以打印所有可能的方式来改变钱,但我不能

这是我的密码:

    static HashMap <Integer,Integer> map = new HashMap<>(); 
public static void main(String [] args)
{
    int money=75,coins [] = {1,5,6};
    System.out.println(rc(money,coins));
}

public static int rc(int money,int [] coins)
{
    if(money==0)
        return 0;
    int mincoins = Integer.MAX_VALUE;
    for(int i=0;i<coins.length;i++)
    {
        if(money>=coins[i])
        {
            int ncoins;
            if(map.containsKey(money-coins[i]))
                ncoins = map.get(money - coins[i]);
            else 
                ncoins = rc(money-coins[i],coins);
            map.put(money-coins[i], ncoins);
            if(ncoins+1<mincoins)
                mincoins = ncoins+1;
        }
    }
    return mincoins;
 }
static HashMap map=new HashMap();
公共静态void main(字符串[]args)
{
国际货币=75,硬币[]={1,5,6};
系统输出打印LN(rc(货币、硬币));
}
公共静态整数rc(整数货币,整数[]硬币)
{
如果(货币==0)
返回0;
int mincoins=Integer.MAX_值;
对于(int i=0;i=coins[i])
{
int-ncoins;
if(地图容器(钱币[i]))
ncoins=map.get(money-coins[i]);
其他的
ncoins=rc(货币硬币[i],硬币);
地图放置(钱币[i],n币);

如果(ncoins+1每次调用递归函数之前,将硬币添加到全局列表中。函数调用后,将硬币从列表中移除

如果您的
货币=0
,那么您只需打印列表,因为这将告诉您必须减去哪些硬币才能得到0

如果
钱<0
,那意味着你做得太多,减法太多,必须后退一步

表意文字链接:

import java.util.*;
导入java.lang.*;
导入java.io.*;
表意文字{
静态列表顺序=新的ArrayList();
公共静态无效rc(整数货币,整数[]硬币){
如果(货币<0){
返回;
}
如果(货币==0){
系统输出打印项次(序号);
}
int mincoins=Integer.MAX_值;
对于(int i=0;i
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 5]
[1, 1, 1, 1, 1, 1, 5, 1]
[1, 1, 1, 1, 1, 1, 6]
[1, 1, 1, 1, 1, 5, 1, 1]
[1, 1, 1, 1, 1, 6, 1]
[1, 1, 1, 1, 5, 1, 1, 1]
[1, 1, 1, 1, 6, 1, 1]
[1, 1, 1, 5, 1, 1, 1, 1]
[1, 1, 1, 6, 1, 1, 1]
[1, 1, 5, 1, 1, 1, 1, 1]
[1, 1, 5, 5]
[1, 1, 6, 1, 1, 1, 1]
[1, 5, 1, 1, 1, 1, 1, 1]
[1, 5, 1, 5]
[1, 5, 5, 1]
[1, 5, 6]
[1, 6, 1, 1, 1, 1, 1]
[1, 6, 5]
[5, 1, 1, 1, 1, 1, 1, 1]
[5, 1, 1, 5]
[5, 1, 5, 1]
[5, 1, 6]
[5, 5, 1, 1]
[5, 6, 1]
[6, 1, 1, 1, 1, 1, 1]
[6, 1, 5]
[6, 5, 1]
[6, 6]