How We Coding

< 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 < 1return 0;
    return n+sum(n-1);
}
 
int evenSum(int n)
{
    if(n < 1return 0;
    if(n%2 != 0) n--;
    return n+evenSum(n-2);
}
 
void print1(int n)
{
    if(n < 1return ;
    print1(n-1);
    printf("%d\n", n);
}
 
void print2(int n)
{
    if(n < 1return ;
    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 == 0return ;
    f(n-1);
    f(n-1);
    printf(“*”);
}
 
void f(int n)
{
    if(n == 0return ;
    f(n-1);
    printf(“*”);
    f(n-1);
}
 
void f(int n)
{
    if(n == 0return ;
    printf(“*”);
    f(n-1);
    f(n-1);
}
cs



 

3. 동적 프로그래밍

- 피보나치 함수를 구해주는 함수에서 전달값이 크면 왜 느려지는지 생각해보기.

- 이를 해결하기 위한 방법 중 하나를 소개 했지만, 어려우면 넘어가도 됨.

  (메모이제이션)

 

### 숙제 ###

- 복습 잘 하기.

- 1부터 n 까지의 수 중 홀수(혹은 짝수)의 합 구하는 함수 구하기(재귀)

- 배열의 요소들 중 최대값(혹은 최소값) 재귀함수로 구하기.(재귀)

- 배열의 요소들 중 두번째 최대값 재귀함수로 구하기. (재귀)

(힌트가 필요하면 갠톡으로..)

- 연결리스트 개념 공부해오기