이 글은 도움말을 번역한 글입니다.
프로시저에는 변수를 저장할 수 있는 공간이 제한되어 있습니다. 프로시저가 스스로를 호출할 때마다 해당 공간이 더 많이 사용됩니다. 자신을 호출하는 프로시저를 재귀 프로시저라고 합니다. 계속해서 자신을 호출하는 재귀 프로시저는 결국 오류를 발생시킵니다.
Function RunOut(Maximum)
RunOut = RunOut(Maximum)
End Function
이 오류는 두 프로시저가 서로를 무한정 호출하거나 재귀를 제한하는 일부 조건이 충족되지 않을 때 덜 분명하게 나타날 수 있습니다. 재귀에는 용도가 있습니다. 예를 들어 다음 프로시저는 재귀 함수를 사용하여 팩토리얼을 계산합니다.
Function Factorial(N)
If N <= 1 Then ' Reached end of recursive calls.
Factorial = 1 ' (N = 0) so climb back out of calls.
Else ' Call Factorial again if N > 0.
Factorial = Factorial(N - 1) * N
End If
End Function
재귀 프로시저를 테스트하여 메모리가 부족할 정도로 스스로를 너무 많이 호출하지 않는지 확인해야 합니다. 오류가 발생하면, 프로시저가 스스로를 무한정 호출하지 않도록 주의해야 합니다. 또한 다음과 같은 방법으로 메모리를 절약할 수 있습니다:
1. 불필요한 변수를 제거합니다.
2. Variant가 아닌 다른 데이터 타입을 사용합니다.
3. 프로시저의 논리를 다시 평가하고, 재귀 대신 중첩 루프를 활용할 수 있는 경우가 있습니다.
Example
재귀 프로시저 예제로 많이 사용되는 피보나치 수열 예제입니다.
Function Fibonacci(n As Long) As Long
If n <= 0 Then
Fibonacci = 0
ElseIf n = 1 Then
Fibonacci = 1
Else
Fibonacci = Fibonacci(n - 1) + Fibonacci(n - 2)
End If
End Function
도움말 출처
Creating recursive procedures (VBA)
Office VBA reference topic
learn.microsoft.com
'언어 참조' 카테고리의 다른 글
자동화 이해 (0) | 2023.08.07 |
---|---|
다른 응용 프로그램 간의 작업 (0) | 2023.08.06 |
조건부 컴파일 이해 (0) | 2023.08.05 |
With 문 (0) | 2023.08.05 |
Do...Loop 문 (0) | 2023.08.05 |