Home C언어 공부 정리(6/10)-재귀함수
Post
Cancel

C언어 공부 정리(6/10)-재귀함수

22/01/06

1. 재귀함수란

  • ‘나’를 다시 부르는 함수
  • ex)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    void rec();
    
    int main() {
    
      rec();
          
      return 0;
    }
    
    void rec () {
        printf("rec");
        rec(); // 재귀함수 '나' 안에 '나'를 부름
    }
    
  • 결과 : recrecrecrecrecrecrecrecrecrecrecrecrecrecrecrecrecrecrecrecrecrecrecrecrecrec……
  • 끝없이 호출됨
  • 에러! Stack Overflow!

2. 재귀함수 조건+(예시 factorial!)

  • 재귀함수 사용 시 조건부를 사용해서 빠져나올 수 있게 한다.

- 팩토리얼 재귀함수!

  • 팩토리얼의 모양
    factorial_1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int factorial(int);

int main() {
    int num;

    scanf("%d", &num);
    num = factorial(num);
    printf("%d", num);

    return 0;
}

int factorial(int num) {
    if(num == 0) // 재귀함수 빠져나올 수 있는 조건
        return 1;
    
    return num * factorial(num - 1);
}

num = 5

실행 순서
factorial
결과 : 120

3. 그림그리며 생각하기

  • 재귀함수를 짤 때, 어떤 식으로 코드가 움직이는지 직접 그려가면서 생각하는 것이 좋다.

- 1 ~ n까지 수의 합 함수 만들기

  • 그림
    sum

  • 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int sum(int);

int main() {
  int num;

  num = sum(10);

  printf("%d", num);

  return 0;
}

int sum(int num) {
  if(num == 1)
    return 1;

  return num + sum(num-1);
}

결과 : 55

This post is licensed under CC BY 4.0 by the author.

C언어 공부 정리(5/10)-연습문제

C언어 공부 정리(6/10)-매크로

Comments powered by Disqus.