직업은 선물 트레이더

루프제어vs재귀제어 어느게 더 유용할까??

잊어버린 과거

갑자기 이런 생각을 해보았습니다.

재귀제어(Recursion) vs 루프제어(Loop)

둘다 반복을 사용하고 있지만 조금은 색다른 개념이죠.

둘의 소개를 먼저 하고나서 예시를 하나 드리겠습니다.







루프제어 너는 누구니

루프라는 단어를 써서 생소할지 모르지만, 우리말로하면 반복입니다.

C언어에선 while 이나 for문등으로 사용되는 방식이죠.

처음에 정해놓은 조건이 만족할 때 까지 계속 같은작업을 반복시킬 수 있다는 사실은 참 좋은 것 같습니다. 사람이 그런일을 한다면 끔찍하죠.

예를들자면 이런게 있습니다.

양동이의 물이 '동'이날때까지(조건) 물을 '컵'에따라 '마시세요'(행동)
조건이 만족할때까지 행동을 계속해야 됩니다.
컴퓨터는 전력이 계속 공급되고 방해가 없는한 반복명령을 어기지않고 끝까지 해냅니다.


조금은 다른 재귀제어



재귀에서도 반복을 합니다.
 
다만 반복의 조건이 주어지는게 조금 다릅니다. 이렇게 이야기하면 조금 이해하기 좋을까요?

음.. 모기박멸용? 스프레이를 사용하고 있다고 가정합시다. 현재 한마리의 모기를 잡기위해 열심히 뿌리고 있죠. 그런데 갑자기 옆에 바퀴벌레가 나타납니다. 바퀴벌레에 대고 분사하기 시작합니다. 바퀴벌레를 잡았습니다. 그다음에 잡던 모기를 마저 잡습니다.


줄여말하자면 중간에 이벤트가 발생하게되면, 그것을 먼저 처리하게 되는게 재귀의 개념입니다. 하지만 프로그래밍을 할 땐, 이 이벤트가 항상 고정된 자리에서 같은시간에 일어나기 때문에 반복작업이 되는 것입니다. 위의 경우에 비추어보면 바퀴를 잡았더니 5초있다 바퀴가 또 나타나게 되고 잡으면 나타나고.. 계속 반복되는 개념이죠.

왠지 설명을 잘 못하겠네요 ㅠㅠ


어떤게 더 우월할까

재귀냐 반복이냐 어떤게 더 유리한지는 문제애 따라 다른 것 같습니다.

제 생각엔, 간단하게 표현하고쉽다면 재귀제어를, 재귀를 잘 모르겠으면 반복을 쓰는 것 같습니다. 때론 재귀로 표현하면 10줄이내로 엄청나게 간단해질문제가 반복을쓰면 50줄 100줄로도 설명이 안되는 경우가 있기 때문이죠..

그러나 반대로 재귀로 표현하지않아도 될 것을 재귀로 표현하자고한다면 못하는 경우가 있습니다. '재귀' 라는걸 말 그대로 자기자신을 부른다는 의미이데, 여기서의 주체는 컴퓨터에서 어떤 함수를 의미하는 것이므로, 실제로 프로그래밍을 하다보면 재귀를 이용하여서 일반적인 반복문 문제를 풀려면 쓰지않아도 될 머리를 써야 되는 경우도 있을 수 있습니다.

때문에 각 상황에 맞게 써야 좋은 결과를 낼 수 있고 어느게 더 우월하다는 이 둘에겐 어울리지 않는 단어인 것 같습니다.