재귀함수를 잘몰라 어떻게 돌아가는지 궁금해서 혼자 공부를 해보았다....
자기 자신을 호출한다는 뜻만 흐릿하게 알고 있었기에 자세히 들어다 보기로 하였다.
실행 코드
public static void recursionMethod(int n) { System.out.println("recursionMethod call!! n=" + n); if(n == 0) { return; } recursionMethod(n-1); System.out.println("recursionMethod returned n!! n =" + n); } public static void main(String[] args) { recursionMethod(4); } }
결과값
recursionMethod call!! n=4 recursionMethod call!! n=3 recursionMethod call!! n=2 recursionMethod call!! n=1 recursionMethod call!! n=0 recursionMethod returned n!! n =1 recursionMethod returned n!! n =2 recursionMethod returned n!! n =3 recursionMethod returned n!! n =4
기본적으로 call 을하여 n = 4 --> n = 0 으로 가는 이유는 이해가 갔지만
return 하는 순서가 n = 1 --> n = 4 까지 가는 이유가 너무 궁금하여 조사를 해보았다.
메서드 영역 n = 4가 먼저 만들어지고 코드가 동작이 된다
재귀를 통해 계속 새로운 영역이 만들어지다
if(n == 0) {return;} 을 만나면
메서드 종료 되게되어 할게 없어
recursionMethod(n-1); 을 들어가게 되어
메인 위치인 n = 4 부분에 도착하게 되면 최초로 호출했던 main으로 이동하게 되는 원리이다
부메랑을 생각하면 된다
call(4) -> call(3) - > call(2) -> call(1) -> call(0) - > return(1) ->return(2)->return(3) ->return(4)