제14장 자기호출과 함수포인터 자기호출 함수 (Recursive Functions) 재귀적 함수 recursion

Slides:



Advertisements
Similar presentations
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
Advertisements

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
알고리즘 기본 개념 정렬 알고리즘 탐색 알고리즘 알고리즘 복잡도.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
19세기 말 프랑스 수학자 Lucas가 제안 전설 Benares(베트남 하노이 외곽)에는 세계의 중심이 있고, 그 곳에는 아주 큰 사원이 있다. 이 사원에는 높이 50cm 정도 되는 다이아몬드 막대 3 개가 있다. 그 중 한 막대에는 천지 창조 때에 신이 구멍이 뚫린 64.
제14장 동적 메모리.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
컴퓨터 프로그래밍 기초 [Final] 기말고사
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
제 5 장. 스택(Stack).
CHAP 2:순환 순천향대학교 컴퓨터공학과.
Chapter 02 순환 (Recursion).
제3장 스택과 큐.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
CHAP 2:순환 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
6장. printf와 scanf 함수에 대한 고찰
2007 1학기 11 프로젝트 기초 실습.
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
Tail-recursive Function, High-order Function
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
Introduction To Data Structures Using C
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
자바 5.0 프로그래밍.
어서와 C언어는 처음이지 제14장.
자기참조 구조체(1) 먼저 자신과 같은 형의 구조체를 포인트하는 포인터 멤버 필드를 갖는 구조체를 정의한다.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
CHAP 2:순환.
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
10장 부프로그램 구현 순천향대학교 컴퓨터공학과 하 상 호.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
CHAP 2:순환 C로 쉽게 풀어쓴 자료구조 생능출판사 Slide 1 (of 19).
제 1 강.
Hanoi Tower.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
CHAP 2:순환 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
알고리즘 알고리즘이란 무엇인가?.
제 6 장 함수(functions).
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
5장. 선택 알고리즘.
7주차: Functions and Arrays
CHAP 2:순환.
쉽게 배우는 알고리즘 2장. 점화식과 점근적 복잡도 분석
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Numerical Analysis Programming using NRs
트리 (Logical) Data Structures Linear list Tree Graph Linear structures
제 4 장 Record.
13. 포인터와 배열! 함께 이해하기.
C++ Espresso 제15장 STL 알고리즘.
함수 정의, void 자료형 함수 원형선언 함수 호출 변수 영역 규칙 재귀 함수
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

제14장 자기호출과 함수포인터 자기호출 함수 (Recursive Functions) 재귀적 함수 recursion 제14장 자기호출과 함수포인터 자기호출 함수 (Recursive Functions) 재귀적 함수 recursion recursive call 재귀적인 문제의 특성 (1) 정지경우(stopping cases): 비 재귀적 해를 가짐 (2) 축소경우(reducible cases): 정지경우에 좀 더 근접한 문제들로 축소 가능한 경우 (3) 궁극적으로 문제는 정지경우들로 축소 가능 2018-09-16 제14장 자기호출과 함수포인터

재귀적인 문제의 예. 하노이의 탑 (Towers of Hanoi) 문제 - 3개의 탑 또는 말뚝(towers or pegs) A, B, C - 탑 A에는 모두 크기가 다른 n장의 디스크(disks) - 디스크 번호: 작은 것부터 차례로 1, 2, ..., n - 문제의 목표는 탑 A에 있는 n장의 디스크를 탑 C로 다음 규칙들을 지키며 (2n -1)회에 옮기는 순서를 말하는 것이다. 1. 한번에 오직 한개의 디스크만을 옮길수 있고, 이 디스크는 반드시 탑의 맨위에 있는 디스크이어야 한다. 2. 작은 디스크위에 큰 디스크를 올려 놓을 수 없다. 2018-09-16 제14장 자기호출과 함수포인터

재귀적인 문제의 예 (계속) n factorial의 계산 문제 수식을 폴랜드 표기법 (postfix form) 으로 변환문제 Quicksort Eight Queen 문제 등. 2018-09-16 제14장 자기호출과 함수포인터

문제의 분할 이전의 그림과 같이 다섯개의 디스크를 탑 A에서 C로 옮기는 경우를 생각해 보자. 이전의 그림과 같이 다섯개의 디스크를 탑 A에서 C로 옮기는 경우를 생각해 보자. 주어진 문제에서 정지경우와 축소경우는 ? 원래의 문제는 다음과 같은 세개의 문제로 분할 가능: 1. 탑 A에서 탑 B로 4개의 디스크를 옮겨라. 2. 5번 디스크를 탑 A에서 탑 C로 옮겨라. 3. 탑 B에서 탑 C로 4개의 디스크를 옮겨라. 오직 한 개의 디스크를 옮기는 경우이다(예를 들면 2번 디스크를 탑 A에서 C로 옮겨야 하는 경우). 주어진 문제보다 좀 더 간단한 문제는 위와 같은 조건하에서 4개의 디스크를 옮기는 것이며 또 좀 더 간단한 문제는 3개의 디스크 문제 등과 같이 된다. 따라서 원래의 디스크 5개 문제를 한 개 이상의 좀 더 작은 갯수의 디스크 문제로 나눌려고 한다. 2018-09-16 제14장 자기호출과 함수포인터

함수 Hanoi (A, B, C, n) main( ) { void Hanoi ( ); Hanoi ('P', 'Q', 'R', 3); /* L0 */ } void Hanoi (A, B, C, n) char A, B, C; { if (n >= 1) { Hanoi (A, C, B, n-1); /* L1 */ printf ("Move %d from %c to %c.\n", n, A, C); Hanoi (B, A, C, n-1); /* L2 */ } 2018-09-16 제14장 자기호출과 함수포인터

Hanoi(‘P’, ‘Q’, ‘R’, 3)의 추적 (tracing) 2018-09-16 제14장 자기호출과 함수포인터

자기호출과 실행시간스택 2018-09-16 제14장 자기호출과 함수포인터

14.3 자기호출 함수와 반복문 자기호출함수(재귀적함수) 사용 : 알고리즘을 간결하게 표현 함수호출/복귀오버헤드 14.3 자기호출 함수와 반복문 자기호출함수(재귀적함수) 사용 : 알고리즘을 간결하게 표현 함수호출/복귀오버헤드 반복문 이용 : 실행시간 단축. 교재477쪽에서 함수 power(a, b)를 2가지 방법으로 구현 2018-09-16 제14장 자기호출과 함수포인터

실행시간 스택과 사용자 정의 스택 14.4.2 변수의 기억장소 할당 14.4.3 사용자 정의 스택 교재488쪽 보조그림 설명 배열 stack을 push, pop을 경유하지 않고 외부에서 직접 사용한다면? 2018-09-16 제14장 자기호출과 함수포인터

14.5 자기참조 구조 self_referential structure: struct tnode { . . . 14.5 자기참조 구조 self_referential structure: struct tnode { . . . struct tnode *tnodep; }; struct tnode lee, kim; lee.tnodep = &kim; kim.tnodep = &lee; 그림으로 표현하면? 2018-09-16 제14장 자기호출과 함수포인터

이진 트리(binary trees) struct tnode{ char *word; int count; struct tnode *left; struct tnode *right; }; struct tnode *root 이진탐색트리 (binary search trees) 2018-09-16 제14장 자기호출과 함수포인터

단어정렬 예제 프로그램 (14-493.cpp) main( ): 전체적인 제어 getw( ): 단어입력 addt( ): 2진 트리에 단어를 삽입 tprint( ): 단어들을 출력 495쪽 getw( ) 에서 buf[bufp]부터 buf[0]까지의 문자들을 w(단어포인터)에 저장 2018-09-16 제14장 자기호출과 함수포인터

14.6 함수포인터 int (*fp)( ); 에서 fp는 int형을 반환하는 함수를 가리키는 포인터 int greater(a, b) int a, b; { . . . } 일때 fp = greater; (또는 fp = &greater( );) 와 같이 설정후에 (*fp)(x, y); 라고 쓰면 greater(x, y); 와 동일한 함수 호출 가능. 2018-09-16 제14장 자기호출과 함수포인터

포괄함수 또는 함수틀 generic function function template 예. 교재500쪽의 함수 sort( ) void sort (int a[ ], int n, int (*fp)(int, int)) 위에서 fp는 배열원소 비교를 위한 함수 포인터 교재506쪽의 void qqsort(void *v[ ], int left, int right, int (*comp)(void *, void *)) 위에서 ‘void *’는 어느 자료형에 대한 포인터가 와도 좋다는 뜻. 2018-09-16 제14장 자기호출과 함수포인터

Quicksort by C.A.R. Hoare 14_510.cpp n개의 데이터 정렬: Quicksort는 nlog2n 회의 대소비교 Bubble sort는 (1/2)n2회의 대소비교 2018-09-16 제14장 자기호출과 함수포인터