다음을 통해 공유


재귀 프로시저

업데이트: 2007년 11월

재귀 프로시저는 자신을 호출하는 프로시저입니다. 일반적으로 Visual Basic 코드를 작성하는 데 재귀 프로시저가 가장 효과적인 방법은 아닙니다.

다음 프로시저에서는 재귀를 사용하여 원래 인수의 계승을 구합니다.

Function factorial(ByVal n As Integer) As Integer
    If n <= 1 Then
        Return 1
    Else
        Return factorial(n - 1) * n
    End If
End Function

재귀 프로시저에 관한 고려 사항

제한 조건. 재귀를 종료할 수 있는 조건을 하나 이상 테스트하도록 재귀 프로시저를 디자인해야 하며, 적당한 횟수의 재귀 호출에도 그러한 조건이 만족되지 않는 경우도 처리해야 합니다. 오류 없이 만족될 수 있는 조건이 하나라도 없으면 프로시저가 무한 루프를 실행하게 될 위험이 많습니다.

메모리 사용. 응용 프로그램에는 지역 변수에 사용할 수 있는 공간이 한정되어 있습니다. 프로시저는 자신을 호출할 때마다 해당 지역 변수의 추가 복사본을 위해 해당 공간보다 많은 양의 공간을 사용합니다. 이 프로세스가 무한정 계속되면 결국 StackOverflowException 오류가 발생합니다.

효율성. 거의 모든 경우에 재귀 대신 루프를 사용할 수 있습니다. 루프에는 인수를 전달하고, 추가 저장소를 초기화하고, 값을 반환해야 하는 등의 오버헤드가 없습니다. 재귀 호출을 사용하지 않을 경우 성능이 훨씬 더 좋을 수 있습니다.

상호 재귀. 두 프로시저가 서로를 호출하는 경우 성능이 매우 저하되거나 무한 루프가 되기도 합니다. 이러한 디자인은 단일 재귀 프로시저와 동일한 문제를 나타내지만 검색하고 디버그하기는 더 어려울 수 있습니다.

괄호를 사용한 호출. Function 프로시저가 자신을 재귀적으로 호출하는 경우 인수 목록이 없더라도 프로시저 이름 다음에 괄호를 사용해야 합니다. 괄호가 없으면 함수 이름이 함수의 반환 값을 나타내는 것으로 간주됩니다.

테스트. 재귀 프로시저를 작성할 때는 항상 일정 제한 조건을 만족시키도록 매우 신중하게 테스트해야 합니다. 또한 재귀 호출이 너무 많아서 메모리가 부족해지지 않도록 해야 합니다.

참고 항목

작업

프로시저 문제 해결

예외 문제 해결: System.StackOverflowException

개념

Visual Basic의 프로시저

Sub 프로시저

Function 프로시저

Property 프로시저

연산자 프로시저

프로시저 매개 변수 및 인수

프로시저 오버로딩

루프 구조

참조

StackOverflowException