본문 바로가기

프로그래밍(Programing)/엑셀매크로_vba(Excel-Macro)

재귀호출(Recursive Call) 1. 내 생각

재귀호출은 다음장에서 더 다루고, 여기서는 제가 생각한(만든 코드) 것들을 적은 겁니다. 

위키백과 -누승

정보처리산업기사 공부하면서 누승 알고리즘에 재귀호출 사용이 나온다.

 

n! = n x (n-1) x (n-2) x ㆍㆍㆍx 1 = n x (n-1)!

 

n의 누승은  n x { n -1)의 누승 }  으로 정의되므로 다시 누승이 반복된다. 

 

호출할 때마다 매개변수값이 감소 (n-1) 유의.

 

내부적으로 같은 알고리즘을 다시 호출하여 이용하는 경우가 편리할때 사용하는것이

 

재귀호출이라고 한다. ( 2020이기적 서적 )

 

여기까지 배웠을때만 해도 재귀호출에 대한 생각은 

 

굳이 써야할까?였다.

 

1. 재귀호출을 사용할 프로그램을 만들지 않았다. 

   -회사에서 재귀호출하면서 만들 상황이 없었다.

   -만든다 해도  n행 데이터와 (n-1)행데이터를 비교해야하는데 

    n =1일때는 (n-1) =0 되면서 오류발생한다.

    이런경우만 없애줄려고 n =1 에 대한 값을 넣고 n = n +1로 넘어가 다시 실행하게한다. 

    (n 과 (n+1) 설계시 n+1일때는 값이 없으니 n-1일대 동작을 마치고 종료해야한다.

    [n (n-1)] 로 설계할지 [n 과 (n+1)]설계하는 사람 차이)

 - 이렇게 만들면 단점이 있다. 

    1. 보는 코드 양이 많다. n =1일때의 변수 지정을하고 넘어가는데

       변수지정 해야 할이 많으면 보기 좋지 않다. (예쁘지 않다..)

       

      제가 예전에 했던 방식을 조금만 변형해서 보여드립니다.  (아래사진 빈 곳은 지운겁니다.)

 

 A열이 그룹 B열 값

     같은 그룹안에 있는 값들만 일렬로 나열해야 한다.

     test1 : A1 A2 A3 A4

     test2 : A5 A6 A7

   

알고리즘

    i=1 일때 i-1과 비교를 위해 i++ 하고 변수지정함

    이렇게 하면 원하는 대로 출력이 될까? 버튼을 누르면

   P1

 test2가 안나옴

     이유는 2가지 그룹만 비교하면서 마지막(7행)에 비교만 하고 출력이 되지 않는다.

i가 끝나고 마지막행 출력

  반복문 끝나고 출력명령문을 넣어줘야 

P2

제대로 출력됨

현재는 비교 그룹이 2개 밖에 없어 저런 실수를 잡을 수 있었다.

그럼 3개일때는 잘 나올까?

P3

3개 그룹 잘 출력됨

잘 나온다. 

그럼 이제 더는 손 볼게 없을까???????

 

.................

 

 이번 경우는 어떨까

P4

test1 test4이 하나일 경우

 

예전에 비슷한걸 만들때 그룹에 요소가 하나일 경우에는 출력이 안되던 경우가 생긴적 있었다.

 

위에 코드로는 잘 나오지만, 된다고 끝내지 말고 '오류가 날 수 있는 상황이 있을까?' 생각하면서 

테스트 해야 한다고 말하고 싶다. 

 

특히, 저처럼 혼자 만들고 수정 하는 분들은 무조건 오타나 실수로 업데이트하는 경우가 많을거다.(나만 그런가?)

P3 까지 확인하고 끝내지 말고 P4 같은 상황까지 생각하면서 테스트를 진행했으면 하는 마음으로 쓴겁니다.

 

재귀호출 얘기하다 다른쪽으로 빠진감이 많은데 

 

위에 코드를 재귀호출로 바꿀 수 있을까??  ...갑자기 머리가 아파온다..

이것만 봤을때는 재귀호출이 필요할까? 의문이 들었지만, 

퀵정렬을 알고리즘을 보고 생각이 달라졌습니다.

 

다음에 퀵정렬에 대해 알아보겠습니다. 

 

 

 

 

728x90