PROGRAMMING WORKSHOP

Financial Planning | 계정합계 자동화_재귀용법의 활용

앞페이지에서 합계계정에서 입력계정을 관련계정별로
합계를 내는 수식을 합계계정의 각각의 셀에 입력하는 코딩을 하였었다
그런데..
그냥 그 방법으로 끝내고 다음 이야기로 진행하려고 하였는데
마침 차원높은 질문을 하시는 분들이 있어서..
앞페이지의 것을 조금더 업그레이드시키기로 했다

똑같은 작업내용을 변수 몇 개만 바꿔주면서 전달하면
코드가 훨씬 간략하게 되지만, 재귀용법에 공연히 얼어버리는 분들에게는
그런 코드를 올려놓기가 껄끄럽지만,
가만 생각해보니 이 참에 재귀용법에 대하여 긴가민가 하신분들에게
철저히 이해를 하고 넘어갈 기회가 되지 않을까 싶다
우선 재귀용법을 완전파악하고 나면 변수의 의미, 프로시져,함수와의
관계에 대하여 명확한 그림이 여러분의 머리속에 안착이 될 것이다
특히 앞페이지에서 왜 같은 짓을 하는 일을 주욱 널어 놓아야만 하지???!!!
라는 문제의식을 갖고 있다면 더더욱 좋은 기회인 것이다
문제가 있다..!!!해결해볼까??
이럴때 [그런 문제는 재귀용법을 사용하는 것이다],라고 한다면
좋은 기회인것이다

실은 이 문제는 변수의 변화가 그렇게 심하지 않아서
그렇게 어렵지 않은 것 중의 하나이다

그러니 앞페이지의 코드를 보시고 문제의식을 갖였다면
우선 각자 궁리를 해보시고 몇일 있다가 올려 놓을테니
비교하여 보시기 바란다
훨씬 잘 작성하실 수도 있을 것이다

아래를 참고 하시기 바란다
하나는 일반적인 순환문을 돌려서 결과를 얻는 것이고
다른 하나는 재귀함수를 사용한다

일반프로시져

Sub NormalLoop()
Dim lLoops As Long
lLoops = 0
Do While Rnd() < 0.95
lLoops = lLoops + 1
Loop
MsgBox lLoops & "번 순환"
End Sub

재귀함수의 활용

Sub UseRecursive()
MsgBox UntilIWant & "번 순환"
End Sub

Function UntilIWant(Optional lLoops As Long = 0) As Long
If Rnd() < 0.95 Then lLoops = UntilIWant(lLoops + 1)

UntilIWant = lLoops

End Function

두개의 결과는 같다..
복사하여 붙여 넣고 실행시켜보시면서 두개의 다른 점이 무엇인지
관찰하여 보셔도 좋을 것이다

아래의 그림과 같이 재귀용법에서 호출되는 프로시져나 함수는
계속 메모리상에 공장이 만들어지는 셈이다



100개를 만들수도 있고 1000개를 만들수도 있다
물론 메모리가 부족하면 다운 된다..
그래서 슈퍼컴이 필요한 것이다
이름은 같은 함수나 프로시져라도 새로운 공장이 만들어진다는 점
머리속으로 상상하시면 된다
이름은 같지만 전혀 다른 함수나 프로시져가 만들어진다고 생각하면
이해하기 편하다

추가 내용은 화일에서 보시기를..

***[LOG-IN]***