자바 재귀호출 문제 recursive call stack overflow error
조회수 1897회
public static void main(String[] args) {
// TODO Auto-generated method stub
int x =2;
int n =5;
long result = 0;
for (int i =0;i<=n;i++){
result += power(x,i);
}//end of i
System.out.println(result);
}//end main
static long power(int x, int n) {
return (n==1)? x : x*power(x,n-1);
}//end of power
x1 부터 xn 까지 모두 더하는 예제를 풀었는데 실행할 때 stack overflow 에러가 나는 이유가 뭘까요?
if(n==1) return x; return x * power(x,n-1); 이 부분을
return (n==1)? x : x*power(x,n-1); 이렇게 바꾸긴 했는데
잘못된 부분이 있으면 알려주세요!!
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
직접 power함수를 구현할 필요는 없지 않을까요?
public static void main(String[] args) { long result = 0; int x = 2, n = 5; for (int i = 1; i <= n; i++) { result += pow(x, i); } System.out.println(result); } public static long pow(int x, int n) { return (n > 0) ? x * pow(x, n - 1) : 1; }
이렇게 구현하시면 됩니다.
참고로 작성자분께서 올리신 소스에서 i는 0~n까지 반복하시는 코드인데 power함수에서는 n이 1이 될때까지 power함수를 호출하는거라 power(x, 0)을 호출하시게 되면 위와 같이 recursive call stack overflow error가 발생합니다.- 코드의 기능은 동일하지만 예제의 목적이 재귀호출을 활용해보는 것이라서요 ㅠㅠ 답변 감사합니다! 알 수 없는 사용자 2017.10.27 14:25
- 다시 수정해서 답변해드렸습니다! 송의진 2017.10.27 14:40
- 감사합니다!! 알 수 없는 사용자 2017.10.27 14:42
-
댓글 입력