[재귀함수] 재귀함수 구현할 때 염두에 두면 좋은 것들
두비니
·2020. 5. 2. 13:09
작년에 c언어를 처음 배울 때도 재귀함수에 대해서 배웠는데 너무 어려워서 그냥 무시한 적이 있었는데
물론 그랬다가 지금 충분히 고통을 받을 수 있었습니다.
그래서 재귀함수와 함께 지지고 볶고 하다가 결국 여러가지를 깨달을 수 있었습니다..
아직 저도 제대로 아는건 아니지만 발상하는 방법 자체를 정리하면 좋을 것 같네요!
발상에 도움되는 것
일단 재귀함수를 어려워하는 사람들의 특징은(나도그랬고)
재귀가 일어나는 안쪽에서 어떻게 진행이 되는가
에 대해서 궁금해한다는 것입니다..
물론 알면 좋겠지만, 재귀가 3중, 4중으로 겹겹이 진행되면 머리가 슬슬 아파오고, 포기를 하게 됩니다.
그러나 재귀함수에서 진짜 핵심은
재귀함수를 사용함으로써 재귀함수가 하는 역할
을 파악하는 것입니다.
우리가 굳이 재귀함수를 다 헤쳐보았을 때 어떤 일을 하는지에 대해서는 궁금해 할 필요가 없어요.
어차피 컴퓨터가 해주는 일인데 굳이 궁금해 할 필요는 당연히 없습니다.
나는 결론적으로 재귀함수는 수학적 귀납법과 같은 원리라는 글을 보았을 때 완벽하게 이해했습니다.
수학 관련 용어가 나왔다고 소스라치지 말고, 조금만 참아봅시다.
우선 수학적 귀납법은 다음과 같은 흐름으로 진행됩니다.
1) n=1일때 명제를 증명한다.
2) n=k일때 명제가 성립한다고 가정한다.
3) n=k+1일때 명제가 성립함을 2)를 이용해 증명한다.
여기서 핵심은 n을 모든 자연수에 대해서 일일히 증명하지 않고, n=k일때 성립한다고 가정해버린 후
n=k+1일때 명제가 성립함을 2)와의 관계를 이용해 증명한다는 것이죠.
재귀함수를 공부할 때 재귀함수 안에서 일어나는 일을 이해하려고 하는것은
n이 모든 자연수일때를 다 대입해서 이해하려는 것과 같다는 것입니다.
따라서 재귀함수도 같은 원리로 이해하면 편합니다.
1) n=1(초기값)에 대하여 함수안에 식을 구현해 놓는다.
2) n=k일때 함수가 성립한다고 가정한다.
3) n = k+1일때 n=k일때와의 연관성을 탐구한 후 코딩을 한다.
이때 재귀함수와 수학적 귀납법의 차이점은
재귀함수를 작성할 때는 3)에서 분기문이라던가, 부수적인 코딩을 생각해주어야 한다는 정도입니다.
언제까지나 기본 원리가 같다고 했으니 참고만 해도 좋을 것 같습니다.
근데 막상 이해하면 편하긴한데
이 재귀함수 방법이 실행시간을 어마어마하게 잡아먹는 아이이다...
기본적으로 반복문과 함수호출은 실행시간 길어지는 주범인데,
재귀함수는 보통 둘다 가지고 있는지라 정말 기하급수적으로 길어집니다.
물론 한번쯤은 이해해서 나쁠건 없지만
그냥 한번쯤....그 이상은 그닥...
'Coding_Algorithm > C_C++' 카테고리의 다른 글
[C] pthread_mutex 이해하기 (0) | 2021.05.07 |
---|---|
[C/C++] sprintf, snprintf (0) | 2021.03.04 |
[C언어] C언어로 수박받기 게임을 만들어보았습니다. (1) | 2020.08.17 |
[C++] 묵시적 복사 생성 (0) | 2019.12.05 |
[C++] 명품 C++ 프로그래밍 예제 05-11 분석 (0) | 2019.12.05 |