기본 콘텐츠로 건너뛰기

1월, 2008의 게시물 표시

재귀호출 3

재귀호출을 이용한 간단한 Tree 구조를 분석해 보도록 한다. void main () {   recurtree ( 4 ); } void recurtree ( int n ) {   if (n > 0)   {     recurtree ( n-2 );     printf ( "%3d", n );     recurtree ( n-1 );   } }

재귀호출 2

1부터 어떤 수까지의 합을 재귀호출로 구해보자 sum(n) = n + (n-1) + (n-2) + ... + 3 + 2 + 1 이를 다시 정리하면, sum(n) = [ { 1, n = 1 }, { n + sum(n-1), n > 1 } ] 여기서, n 이 1이 되는 조건이 재귀호출 종료조건이 되게 된다. void main() {   int isum = 0;   ...   isum = sum(3);   ... } int sum(int n) {   if ( n == 1 ) return 1;   else     return ( n + sum( n - 1) ); }

재귀호출 1

컴퓨터 알고리즘을 공부하기 위해 많은 준비가 필요한 것은 아니다. 가장 기본적인 개발 환경은 Borland 사의 TurboC++ 컴파일러를 구하여, DOS Shell 상에서 실행되는 프로그램으로 만들면 된다. UI를 구현할 필요가 없으며, 가장 기본적인 입출력 함수를 사용하면 된다. 컴퓨터 알고리즘을 공부한다는 것이 궁극적으로 C 문법을 익히기 위한 것이 아니며, 프로그램을 보기좋게 꾸미기 위한 것이 아니다. 대단위 프로그램으로 얘기한다면 그 프로그램의 핵심이 되는 엔진을 만드는 것이다. 우선 정형화된 컴퓨터 알고리즘을 정리해 보도록 하겠다. 재귀(Recursion)호출 컴퓨터 알고리즘을 언급하는 많은 자료들에서 첫번째 Chapter 로 잡는 것이 "정렬"이다. 이 정렬 알고리즘 중 다른 정렬들에 비해 비교적 좋은 성능을 가진 "퀵정렬", 데이타베이스의 정형화된 형태 중 이진트리내의 순회, 차량항법장치등 길찾기 방법 중의 하나인 그래프 탐색등에 사용하는 재귀호출을 알아보도록 하자. 말 그대로 자기 자신을 다시 호출하여 실행하는 알고리즘이다. 이를 구현하기 위해서 반드시 고려하여야 할 부분이 종료 조건이다. 이 종료 조건에 의해 최종적인 결과치가 나오기 때문이다. 또한 재귀의 깊이가 일정값을 넘었을 경우, 스택오버플로우가 발생한다. 또한 재귀함수와 등가인 비재귀함수와의 계산시간은 엄청난 차이를 보인다. 이는 계산비교 함수로 이를 확인해 보도록 하자.

시작하며

많은 사람들이 소프트웨어 개발을 했으며, 하고 있고 앞으로도 컴퓨터라는 기기가 인류와 함께 하는 한 어떠한 방법으로라도 컴퓨터를 구동시키려면 컴퓨터에게 일련의 명령어를 체계적으로 전달해 주는 묶음인 프로그램을 만들어야 한다 컴퓨터란 기기가 인류 문명에 나타난 이후부터 여러가지 형태의 프로그래밍 방법과 프로그래머 입장에서 이해하기 쉬운 방식의 언어가 생겨났으며, 아직도 수많은 소프트웨어 엔지니어들이 이러한 방법과 언어를 만들고 있다 나는 체계적인 프로그래밍 방법을 모른다 그냥 내가 만들고 싶은 프로그램을 만들어 보고 싶어서 이것 저것을 보고 직접 프로그래밍을 해보면서 나름대로의 생각으로 프로그램을 만들었다 배움의 길은 끝이 없는 것이 맞다 지금도 배워야 하고 앞으로도 많은 배울 것들이 내 귀에 들릴 것이며 나의 눈을 어지럽게 할 것 같다 한번 시작해 보자