본문 바로가기
Others/학교 공부

재귀호출

by 언니팬더 2013. 3. 22.

 

재귀호출


매서드의 내부에서 자기 자신을 다시 호출하는 것을 재귀호출(rexursice call)이라 한다. 반복적인 작업을 해야하는 메서드에 반복문 대신 재귀호출을 이용하면, 메서드를 훨씬 간단하게 할 수 있는 경우가 있다.
하지만, 재귀호출은 다소 효율이 떨어진다는 단점이 있다. 재귀호출은 반복적으로 메서드를 호출하는 것이기 때문에 메서드를 호출하는데 드는 비용이 추가적으로 발생하기 때문이다.

ex>재귀함수의 대표적인 예 >> 팩토리얼


함수 >> f(n) = n*f(n-1), 단 f(1)=1.

class test{
 
 public static void main(String[] args)
 {
  System.out.println(factorial(4));//=Test.factorial(4)
 }
 
 static long factorial(int n){

return (n==1) ?1:n*factorial(n-1);//삼항연산자 사용

/*  long result = 0;
  
  if(n==1)
  {
   result=1;
  }
  else
  {
   result=n*factorial(n-1);//다시 메서드 자신을 포출한다
  }
  
  return result;
 */
 }
}

>>static메서드 이므로 인스턴스를 생성하지 않고 직접 호출할 수 잇다.그리고 main메서드와 같은 클래스에 있기 때문에 static메서드를 호출할때 클래스이름을 생략하는 것이 가능하다.


재귀호출은 무한호출이 되기 쉬우므로 주의하자.

 

class test

 public static void main(String[] args)
 {
  main(null);//자기 자신을 다시 호출한다.
 }

}

 

maun메서드 역시 자기 자신을 호출하는 것이 가능하며 아무 조건없이 계속해서 자기 자신을 다시 호출 하기 때문에 무한호출에 빠지게 된디. main메서드가 종료되지 않고 호출스택에 계속 쌓이게 되므로 결국 호출스택의 메모리 한계를 넘게 되고 StackOverflowError가 발생하여 프로그램은 비정상적으로 종료되므로 주의하자