Почему я получаю ошибку переполнения стека, и я пытаюсь решить эту проблему рекурсивно как начало, до того, как я начните использовать динамическое программирование. В монете метода «a» - это массив, в котором хранятся монеты, которые будут формировать общую сумму, которую я хочу, сумма - это сумма, которую я хочу (17, например), и i представляет собой индекс массива, который i am atfind Количество способов получить общее количество 17 центов (например), используя 1,5,10,25,50 центов
import java.util.*;
public class dp2 {//RECURSIVE WAY THEN OPTIMIZE TO DP
public static int coins (int [] a, int sum,int i){
if (sum==0)
return 1;
else if (i==a.length){
return 0;
}
else if (i>a.length&&sum<a[i]){
return coins(a,sum,i++);
}
else {
return coins(a,sum-a[i],i++)+coins(a,sum-a[i],i);
}
}
public static void main (String [] args){
Scanner sc = new Scanner (System.in);
while (sc.hasNext()){
int x = sc.nextInt();
int y=x;
int [] a ={1,5,10,25,50};
int w = coins(a,y,0);
System.out.println("There are " +w+ " ways to produce "+x + " coins change.");
}
}
}
Это, вероятно, бесконечный рекурсивный вызов, проверьте состояние (код, вы должны найти проблему быстрее нас). Или может быть много рекурсивного вызова, но маловероятно, что вы перегрузите стек. Использование отладки для отслеживания вызовов – AxelH
Это бесконечный рекурсивный вызов. –
Одно слово совета как примечание стороны: вы должны придерживаться одного способа форматирования однострочных утверждений (и я предлагаю всегда использовать фигурные скобки), так как смешение может привести к путанице и трудно обнаружить ошибки. Я имею в виду такие вещи, как ваш первый if-блок, а не else-if-block. – Thomas