なぜスタックオーバーフローエラーが発生するのですか?これは私が開始する前に再帰的にこれを解決しようとしていますダイナミックプログラミングを使い始める。メソッドコインでは、 "a"は、私が望む合計を形成するコインを保持する配列であり、sumは合計(例えば17)であり、iは配列iのインデックスを表すamでfind 1,5,10,25,50セントを使用して合計17cents(たとえば)を取得する方法の数
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
これは無限の再帰呼び出しです。 –
補足としての1つの助言:1行の書式を書式設定する1つの方法に固執する必要があります(混乱を招き、バグを見つけにくいので、常に中括弧を使用することをお勧めします)。私が意味することは、あなたの最初のif-blockが、それに続くelse-if-blockとは対照的であるということです。 – Thomas