Algorithms

[Algorithms] 재귀적 프로그래밍(Recursive Programming)_1

구루싸 2019. 8. 12. 20:29
반응형
SMALL

지난 번에 연결리스트를 이용한 큐를 작성하였다

enqueue()함수를 통해 int형 값을 큐(Queue)에 저장하고

dequeue()함수를 통해 큐(Queue)에 저장된 순서대로 하나씩 출력하였는데

큐에 저장된 모든 원소(값)들을 모두 출력하고 싶다면 어떻게 해야할까?

가장 쉽게 떠올릴 수 있는 방법은 head node부터 차례로 출력하는 것이다

parameter(from)로 받은 노드부터 순서대로 출력

자, 그런데 제목이 재귀적 프로그래밍이다

이 dynamic_print_list()함수를 recursive_print_list()함수로 변경해보자

parameter(from)로 받은 노드부터 순서대로 출력

재귀적 프로그래밍(Recursive Programming)을 설명할 때

가장 많이 나오는 인용구는 GNU("GNU's Not Unix!")인데

GNU를 설명하기 위해 자기 자신을 이용하고있기 때문이다

사실 재귀적 프로그래밍은 문제를 (수학적으로)간결하게 하기 위해 이용하는데

정작 재귀를 이해하기 위해서는 프로그램을 작성해서 디버깅을 해보든 그림을 그려보든

한 번쯤은 해보아야 어느 정도 감을 잡을 수 있다

또한, 프로그램을 재귀적 프로그래밍을 이용해 작성하다보면

Segmentation Fault 에러를 종종 볼 수 있다

함수 호출을 할 경우 Stack에 쌓이게 되는데

잦은 함수 호출로 인해 Stack Overflow가 발생하기 때문이다 

그렇기 때문에 재귀적 프로그래밍을 할 때는 각별한 주의가 필요하고

추천하는 방법은 아니다(뒤에 나올 동적 프로그래밍(Dynamic Programming)으로 해결)

어쨌든 학습을 위해 재귀(Recursion)을 이용한 프로그램 몇 개를 더 해보도록 하겠다 

반응형
LIST