기본 콘텐츠로 건너뛰기

재귀호출 1

컴퓨터 알고리즘을 공부하기 위해 많은 준비가 필요한 것은 아니다.
가장 기본적인 개발 환경은 Borland 사의 TurboC++ 컴파일러를 구하여, DOS Shell 상에서 실행되는 프로그램으로 만들면 된다.
UI를 구현할 필요가 없으며, 가장 기본적인 입출력 함수를 사용하면 된다.
컴퓨터 알고리즘을 공부한다는 것이 궁극적으로 C 문법을 익히기 위한 것이 아니며,
프로그램을 보기좋게 꾸미기 위한 것이 아니다.
대단위 프로그램으로 얘기한다면 그 프로그램의 핵심이 되는 엔진을 만드는 것이다.
우선 정형화된 컴퓨터 알고리즘을 정리해 보도록 하겠다.

재귀(Recursion)호출
컴퓨터 알고리즘을 언급하는 많은 자료들에서 첫번째 Chapter 로 잡는 것이 "정렬"이다.
이 정렬 알고리즘 중 다른 정렬들에 비해 비교적 좋은 성능을 가진 "퀵정렬", 데이타베이스의 정형화된 형태 중 이진트리내의 순회, 차량항법장치등 길찾기 방법 중의 하나인 그래프 탐색등에 사용하는 재귀호출을 알아보도록 하자.
말 그대로 자기 자신을 다시 호출하여 실행하는 알고리즘이다.
이를 구현하기 위해서 반드시 고려하여야 할 부분이 종료 조건이다. 이 종료 조건에 의해 최종적인 결과치가 나오기 때문이다.
또한 재귀의 깊이가 일정값을 넘었을 경우, 스택오버플로우가 발생한다.
또한 재귀함수와 등가인 비재귀함수와의 계산시간은 엄청난 차이를 보인다.
이는 계산비교 함수로 이를 확인해 보도록 하자.

댓글

이 블로그의 인기 게시물

Ubuntu (Kubuntu) 에 desktop 파일 만들기

Package 관리자등을 통해 직접 Repository 에 있는 Application 을 설치하는 경우에는 필요한 경로와 파일, Category 로 분류된 Icon 등록 등이 자동적으로 이루어지나 firefox, eclipse 등 새로운 버전을 새로 설치할 경우, 다음과 같은 절차를 통해 시작메뉴에 등록시킬 수 있다. 다음은 eclipse-SDK-3.6-linuxx-gtk.tar.gz 을 받아 설치 등록하는 것을 예로 든다. 1. 다운받은 파일을 /usr/lib에 압축해제한다. (물론, super user 계정으로 실행해야 한다.) 2. 보통의 경우, /usr/bin Directory 는 PATH 에 물려 있으므로 다음과 같은 실행 파일을 만들어 놓는다. # cd /usr/lib # chmod +x eclipse # cd /usr/bin # sudo nano eclipse eclipse 파일에는 아래의 내용을 입력하여 넣는다. export ECLIPSE_HOME="/usr/lib/eclipse" $ECLIPSE_HOME/eclipse $ * # sudo chmod 755 eclipse 3. Desktop Menu 에 추가하려면 # cd /usr/share/applications # sudo nano eclipse.desktop [Desktop Entry] Encoding=UTF-8 Name=Eclipse Comment=Eclipse IDE Exec=eclipse Icon=/usr/lib/eclipse/icon.xpm Terminal=false Type=Application Categories=GNOME;Application;Development' StartupNotify=true 이렇게 입력한 파일을 저장하면, 시작메뉴 > 개발 > Eclipse 아이콘이 생성되어 메뉴에서 직접 실행할 수 있게된다.

우분투에 연결된 프린터, 스캐너를 윈도우즈에서 공유하여 사용하는 방법

[Sharing Printer and Scanner through Network] 전제조건 ( 사용환경 ) 복합기가 연렬되어 프린터와 스캐너 서비스를 공급할 대상 : Ubuntu 16.10 (Yakkety Yak) 64bit 공유된 프린터와 스캐너를 사용할 대상 : Windows 10 64bit 사용 중인 복합기 : Canon-MX318 (PIXMA MX310 Series) Server-side setup $ sudo apt update $ sudo apt-get install cupsys cupsys-client xinetd $ sudo apt-get install samba smbfs swat $ sudo dpkg-reconfigure xinetd $ sudo apt install cups cups-pdf xsane sane-utils xscanimage gscan2pdf $ sudo adduser saned lp $ sudo gedit / etc/cups/ printers.conf 웹브라우저의 http://snjee-nb2-ubuntu:631 에서 설정된 내용들이 표시된다. $ sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original $ sudo chmod a-w /etc/cups/cupsd.conf.original $ sudo gedit /etc/inetd.conf sane-port stream tcp nowait saned.saned /usr/sbin/saned saned $ sudo touch /etc/xinetd.d/saned $ sudo gedit /etc/xinetd.d/saned service saned { socket...

STM32CubeIDE 한글 주석 깨짐 문제 해결

STM32CubeIDE 는 JAVA로 프로그램된 eClipse CDT 프레임워크 기반으로 제작된 소프트웨어 이다. 아래의 내용은 STM32CubeIDE 개발 환경에서,  시스템 환경을 변경하기 위해  Pinout 등을 수정하여  Device Configuration Tool Code Generation (IOC File) 을 수행하면 수정된 코드가 자동 생성된다. 이 때, 소스 상의 한글 주석이 깨지는 문제점을 해결하는 방법이다. JAVA의 File Encoding 문제이며, 나는 소스파일을 UTF-8로 encoding 하도록 수정하였다. 다음의 순서로 진행한다. 1. 메뉴 Window > Preferences > Workspace - 하단의 Text file encoding을 Other 리스트 중에서 UTF-8을 선택한다. - Apply and Close 한다. 2. 탐색기 > 내 PC > 마우스 우측 클릭 > 팝업 메뉴에서 "속성" > 고급 시스템 설정 - 시스템 속성 창이 뜨면 "고급" 탭 하단의 "환경 변수" 클릭 - 사용자 변수에 "새로 만들기" 버튼을 눌러 변수 이름 : JAVA_TOOL_OPTIONS 변수 값 : -Dfile.encoding=UTF-8