180130 튜터링 - 재귀함수 만들기, 분석하기
< 180130 튜터링 >
1 재귀함수 만들기.
>> 함수를 잘 정의하고, 그 정의를 그대로 활용하기
>> 어떻게 쪼갤지 생각하기..
>> 언제까지??(재귀의 종료, 탈출조건)
>> 점화식을 알고 있다면 그대로 표현하기.
- 팩토리얼 계산하는 함수
- 1부터 n까지의 합 구하는 함수
- 1 부터 n 까지 출력하는 함수
- n 부터 1까지 거꾸로 출력하는 함수
- a 의 n승 (파워함수)을 구하는 함수
- 배열 요소들의 합 재귀함수로 구하기.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <stdio.h> int sum(int n) { if(n < 1) return 0; return n+sum(n-1); } int evenSum(int n) { if(n < 1) return 0; if(n%2 != 0) n--; return n+evenSum(n-2); } void print1(int n) { if(n < 1) return ; print1(n-1); printf("%d\n", n); } void print2(int n) { if(n < 1) return ; printf("%d\n", n); print2(n-1); } int main() { int n; scanf("%d", &n); printf("%d\n", sum(n)); printf("%d\n", evenSum(n)); print1(n); // 1 to n puts(""); print2(n); // n to 1 } | cs |
2. 함수의 호출과정
- 하노이 타워 코드가 왜 그렇지 구현되어 있는지.
(이해 안되면, Hanoi(3, ‘A’, ‘B’, ‘C’); 손으로 써가면서 따라가봐 ㅎㅎㅎㅎ)
- 아래 세 함수의 결과는 같지만, 호출 순서가 어떻게 다른지 생각해보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | void f(int n) { if(n == 0) return ; f(n-1); f(n-1); printf(“*”); } void f(int n) { if(n == 0) return ; f(n-1); printf(“*”); f(n-1); } void f(int n) { if(n == 0) return ; printf(“*”); f(n-1); f(n-1); } | cs |
3. 동적 프로그래밍
- 피보나치 함수를 구해주는 함수에서 전달값이 크면 왜 느려지는지 생각해보기.
- 이를 해결하기 위한 방법 중 하나를 소개 했지만, 어려우면 넘어가도 됨.
(메모이제이션)
### 숙제 ###
- 복습 잘 하기.
- 1부터 n 까지의 수 중 홀수(혹은 짝수)의 합 구하는 함수 구하기(재귀)
- 배열의 요소들 중 최대값(혹은 최소값) 재귀함수로 구하기.(재귀)
- 배열의 요소들 중 두번째 최대값 재귀함수로 구하기. (재귀)
(힌트가 필요하면 갠톡으로..)
- 연결리스트 개념 공부해오기
'Tutoring > 17-2 Data Structure (Winter)' 카테고리의 다른 글
180301 튜터링 - 큐(Queue) (0) | 2018.03.01 |
---|---|
180301 튜터링 - 스택의 응용 (수정:180514) (0) | 2018.03.01 |
180220 튜터링 - 스택 (0) | 2018.02.21 |
180213 튜터링 - 연결리스트, 양방향, 원형 연결리스트 (0) | 2018.02.14 |
180206 튜터링 - 연결리스트 (0) | 2018.02.06 |