왜 스택 오버플로 오류가 발생합니까? 제가이 문제를 시작으로 재귀 적으로 해결하려고 시도하는 이유는 무엇입니까? 동적 인 프로그래밍을 사용하여 시작합니다. 방법 동전에서 "a"는 내가 원하는 총을 형성 할 동전을 보유하는 배열이고, sum은 내가 원하는 총 (예 : 17)이고, i는 그 배열의 색인을 나타냅니다. 오전에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
이것은 무한 재귀 호출입니다. –
한 가지 조언을 부탁합니다. 한 줄짜리 문장을 작성하는 한 가지 방법을 고집해야합니다. 혼합하면 혼동을 일으키고 버그를 찾기 어렵 기 때문에 항상 중괄호를 사용하는 것이 좋습니다. 제 말은 첫 번째 if-block이 else-if-block과 반대되는 것입니다. – Thomas