글 작성자: 취업중인 피터팬
728x90
기본 환경
JDK : 1.8.0_261 버전
JRE : 1.8.0_261 버전
JAVA VERSION : 8 업데이트 261
Eclipse IDE VERSION : 2020-06버전

 

목표

자바의 재귀함수에서 일어나는 무한루푸 에러에 대해 이해한다.


 

 

코드
package ex05method;

public class E08RecursiveError {

	
	public static void main(String[] args) {
		showHi(3);
	}
	/*
	 1. 감소연산자로 인해 cnt 의 값은 차감되지만..
	 2. 조건식의 위치가 잘못되어
	 3. 재귀호출을 하기전 종료체크를 할 수 있도록 수정해야 한다.
	 
	 stackOverFlow(스택오버플로우)
	 :	스택은 함수가 종료되기 전까지의 모든 정보를 저장하는 메모리로
	 유한한 공간이므로 무한푸브에 빠지게 되면 저장능력을 초과하여
	 해당 에러가 발생하게 된다.
	 */
//
//	public static void showHi(int cnt) {
//		System.out.println("Hi~!");
//		System.out.println("cnt = " + cnt);
//		
//		showHi(--cnt);
//		if(cnt == 1) {
//			return;
//		}
//	
//	}
//	
	public static void showHi(int cnt) {
		System.out.println("Hi~!");
		System.out.println("cnt = " + cnt);
		
		if(cnt == 1) {
			return;
		}

		showHi(--cnt);
		
		/*
		 감소연산자가 뒤에 있으면 cnt의 값이 갑소하기 전 함수를 호출함으로
		 무한루프에 빠지게 된다.
		 */
	
	}
	
	
}

 

재귀함수의 무한루프 에러이다. 주석한 부분을 실행하거나 cnt--로 로직을 짜게 되면 무한루프에 빠지게된다. 재귀함수를 호출할 때는 조심해서 하도록 하자

 

 

에러 결과값

으아 이게 뭐임

 

 

정상 결과 값