자바 재귀 호출 (초보)

조회수 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가 되면 함수가 끝나고 나서, 아직 실행해야 하는 남은 함수를 처리하러 가는 겁니다. 말재주가 부족해서 설명이 되었는지 모르겠네요.

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

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

(ಠ_ಠ)
(ಠ‿ಠ)