java代码StackOverflowerr中的硬币交换

java代码StackOverflowerr中的硬币交换,java,coin-change,Java,Coin Change,找不到问题,每次我运行这段代码时,它都会因为这一行而溢出 countCombine += count(array,money - (array[i]*(int)(money/array[i]))); 基本上这个问题很简单。 给定一个值N,如果我们想换N美分,并且我们有无限量的S={S1,S2,…,Sm}值的硬币,我们可以用多少种方式来换?硬币的顺序无关紧要 例如,对于N=4和S={1,2,3},有四种解决方案:{1,1,1},{1,1,2},{2,2},{1,3}。所以输出应该是4。对于N=1

找不到问题,每次我运行这段代码时,它都会因为这一行而溢出

countCombine += count(array,money - (array[i]*(int)(money/array[i])));
基本上这个问题很简单。 给定一个值N,如果我们想换N美分,并且我们有无限量的S={S1,S2,…,Sm}值的硬币,我们可以用多少种方式来换?硬币的顺序无关紧要

例如,对于N=4和S={1,2,3},有四种解决方案:{1,1,1},{1,1,2},{2,2},{1,3}。所以输出应该是4。对于N=10和S={2,5,3,6},有五个解:{2,2,2,2,2},{2,2,3,3},{2,2,6},{2,3,5}和{5,5}。所以输出应该是5

    public class CoinExchangeProblem {

        int countCombine = 0;
        private int count(int array[],int money){
    //        sort the array 
    //        Arrays.sort(array);    
    //        System.out.println(Arrays.toString(array));


            if (money == 0) {
                return 1;
            } else if (money < 0) {
                return 0;
            }


            for(int i = 0; i < array.length; i++){
                countCombine += count(array,money - (array[i]*(int)(money/array[i])));
            }
            return countCombine;

        }




        public static void main(String[] args) {
            CoinExchangeProblem coinExch = new CoinExchangeProblem();
            System.out.println(coinExch.count(new int[]{1,2,3}, 4));
    //        System.out.println(coinExch.count(new int[]{2, 5, 3, 6}, 10));
        }
}
公共类CoinExchangeProblem{
int countCombine=0;
私有整数计数(整数数组[],整数货币){
//对数组进行排序
//数组。排序(数组);
//System.out.println(array.toString(array));
如果(货币==0){
返回1;
}否则如果(钱<0){
返回0;
}
for(int i=0;i
当此部件

(array[i]*(int)(money/array[i]))
等于零你是无限递归的牺牲品,你用同样的钱调用函数

您可以将其更改为:

 if(money >= array[i])
        countCombine += count(array,money - (array[i]*(int)(money/array[i])));

因此,这里永远不会得到零,但要测试更多的示例,因为我没有进行过很多测试,但我认为这在逻辑上是正确的

您在IDE调试器中运行过这个吗?如果没有,请尽快执行。是的,我尝试了调试器,我认为“for(int I=0)”,这是问题的原因。如果(money<0),您必须执行更多的
If
除了返回0,您还需要更改程序的操作,包括让它尝试另一个值的硬币。但更重要的是,在尝试将递归提交到代码之前,必须在纸上仔细考虑并测试它的逻辑。此外,您还需要找到一种方法来返回多个解决方案或打印出多个解决方案。在f事实上,我完全搞不懂你的逻辑,我不知道它怎么能解决你的问题。你是不是先在纸上写出来的?