지난 번에 연결리스트를 이용한 큐를 작성하였다
enqueue()함수를 통해 int형 값을 큐(Queue)에 저장하고
dequeue()함수를 통해 큐(Queue)에 저장된 순서대로 하나씩 출력하였는데
큐에 저장된 모든 원소(값)들을 모두 출력하고 싶다면 어떻게 해야할까?
가장 쉽게 떠올릴 수 있는 방법은 head node부터 차례로 출력하는 것이다
자, 그런데 제목이 재귀적 프로그래밍이다
이 dynamic_print_list()함수를 recursive_print_list()함수로 변경해보자
재귀적 프로그래밍(Recursive Programming)을 설명할 때
가장 많이 나오는 인용구는 GNU("GNU's Not Unix!")인데
GNU를 설명하기 위해 자기 자신을 이용하고있기 때문이다
사실 재귀적 프로그래밍은 문제를 (수학적으로)간결하게 하기 위해 이용하는데
정작 재귀를 이해하기 위해서는 프로그램을 작성해서 디버깅을 해보든 그림을 그려보든
한 번쯤은 해보아야 어느 정도 감을 잡을 수 있다
또한, 프로그램을 재귀적 프로그래밍을 이용해 작성하다보면
Segmentation Fault 에러를 종종 볼 수 있다
함수 호출을 할 경우 Stack에 쌓이게 되는데
잦은 함수 호출로 인해 Stack Overflow가 발생하기 때문이다
그렇기 때문에 재귀적 프로그래밍을 할 때는 각별한 주의가 필요하고
추천하는 방법은 아니다(뒤에 나올 동적 프로그래밍(Dynamic Programming)으로 해결)
어쨌든 학습을 위해 재귀(Recursion)을 이용한 프로그램 몇 개를 더 해보도록 하겠다
'Algorithms' 카테고리의 다른 글
[Algorithms] 선형 탐색(Linear Search)과 이진 탐색(Binary Search) (0) | 2020.07.27 |
---|---|
[Algorithms] 유클리드(Euclid) 호제법 (0) | 2020.07.26 |
[Algorithms] 재귀적 프로그래밍(Recursive Programming)_2 (0) | 2019.08.12 |
[Algorithms] 연결리스트(Linked List)를 이용한 큐(Queue) (0) | 2019.07.29 |
[Algorithms] 배열을 이용한 큐(Queue) (0) | 2019.07.18 |