본문 바로가기
프로그래밍

재귀호출로 하위 항목(디렉토리) 접근

by minimax95 2020. 4. 27.

 

 

재귀 호출(Recursive Call)이란 메서드 내에서 자기 자신을 재호출하는 것을 말한다.

재귀 함수를 호출하는 것은 가독성 측면에서는 그다지 호평받지 못해서 코딩룰을 따지는 곳에서는 지양하라고 한다.

 

그러나 재귀함수를 이용하면 가장 좋은 곳이 있다.

바로 하위 디렉토리에 접근하거나 트리구조에서 하위 아이템 항목을 찾을 때 매우 유용하다.

즉, 부모-자식 관계 형태에서도 하위 모든 자식들을 탐색할 수 있다.

 

재귀함수의 전형적인 모습은 아래와 같다.

public void Find(string dir)

{

    string[] dirs = Directory.GetDirectoryInfo(dir);

    foreach(string item in dirs)

    {

        DirectoryInfo directory = new DirectoryInfo(item);

        Debug.WriteLine(directiory.Name);

        Debug.WriteLine(directiory.Attributes);

        Debug.WriteLine(directiory.CreationTime);

 

        if(!Directory.Exists(item)

        {

            return;    // 재귀함수 종료

        }

        else

        {

            Find(item);    // 재귀함수 호출

        }

    }

}

 

재귀함수는 주의할 점이 있다. 

재귀함수는 하위 아이템이 무수히 많거나 재귀 종료 조건을 잘못 설정할 경우 무한루프에 빠질 수 있음을 기억해야 한다.

 

수학에서도 팩토리얼을 구할 때 재귀함수를 쓰곤 하는데

만일 아래와 같이 잘못된 수식(버그)라면 무한루프로 인해서 StackOverflowException이 발생하게 된다.

 

public long factorial(long num)

{

    if(num == 0) return 1;

 

    return nun*factorial(num + 1);    // 팩토리얼에서는 num - 1로 수정해야 정상적인 결과값을 출력

}

 

부모 자식 관계에서 하위 자식의 Path를 찾는다면 아래와 같이 구할 수 있다.

public bool CheckParent(string WindowPath)

{

    if(Parent.Path == WindowPath)    //Parent는 Window의 부모(인터페이스)

    {

        return true;

    }

    else

    {

        return Parent.CheckParent(WindowPath);

    }

}

댓글