자바 재귀호출 문제 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
  • for(int i=0)->for (int i =1)

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)