자바 재귀 호출 (초보)
조회수 355회
public void preorder(int index) {
// 내용 작성
if(aTree[index] != null) {
System.out.print(aTree[index]);
preorder(2 * index);
preorder(2 * index + 1);
}
}
간단한 트리 전위 순회 함수 입니다.
배열은 32 크기 사이즈 오브젝트 배열로, 입력 index 는 1입니다.
aTree[12] 부터 null 값입니다.
제가 궁금한 것은 디버깅 해보니까 index 가 16이 되어서 if 문이 false 가 되었을때
다시 preorder(2 * index + 1); 이 함수로 넘어 가더라구요.
이유가 무엇인가요? if 문이 false 이니까 자동 적으로 preorder 함수가 끝나야 하는 것 아닌가요?
왜
preorder(2 * index);
(index == 8) ->
preorder(16);
if(aTree[index] != null) == false ->
preorder(2 * index + 1); ->
preorder(17) ->
if(aTree[index] != null) == false ->
preorder(2 * index + 1); ->
preorder(4)
로 함수가 넘어가는건지 이유가 뭔가요? 제 머리로는 도저히 이해가 안돼요,,
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
주어진 함수에서 preorder 함수를 2 * index에서 한 번, 2 * index+1에서 한번 총 두 번 호출하네요. 그럼 이런 식으로 프로그램이 실행되겠죠?
preorder(1) ->preorder(2) ->preorder(4) ->preorder(8) ->preorder(16) ->null ->preorder(17)->null ->preorder(9) ->... ->... ->preorder(3)-> ...
즉 if가 false가 되면 함수가 끝나고 나서, 아직 실행해야 하는 남은 함수를 처리하러 가는 겁니다. 말재주가 부족해서 설명이 되었는지 모르겠네요.
댓글 입력