재귀함수


재귀함수란, 함수 내에서 자기자신을 다시 호출하는 함수를 의미한다.


 ex)

1
2
3
4
5
void recursive(int n)
{
    printf("Recursive call! \n");
    Recursive(); // 나 자신을 재 호출
}

cs


완료되지 않음 함수를 다시 호출하는 것은 가능하다. 

4행이 호출될 때, 함수의 처음으로 돌아가 재 진입한다고 생각하지 말고 4행이 호출되면 recusive의 함수의 복사본을 만들어서, 복사본이 실행된다고 생각하자.


ex)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
 
void recursive(int n)
{
    if(n<=0)
        return;
    
    printf("Recursive call! %d\n",n);
    recursive(n-1); // 나 자신을 재 호출
}
 
int main()
{
    recursive(3);
    return 0;
}
 

cs

실행결과

Recursive call! 3

Recursive call! 2

Recursive call! 1


5행의 조건문이 들어감으로써, 재귀함수의 탈출 조건이 성립되어 함수가 반환하기 시작한다. 


ex)Factorial

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
 
int fct(int n)
{
    if(n==0)
        return 1;
    else
        return n * fct(n-1);
}
 
int main()
{
    int n;
    int j;
    
    printf("0이상 정수 입력:");
    scanf("%d",&n);
    
    j=fct(n);
    printf("%d팩토리얼은? %d\n",n,j);
    
    return 0;
}
 

cs

출력결과

0이상 정수 입력:5

5팩토리얼은? 120

0이상 정수 입력:3

3팩토리얼은? 6


'programming > C' 카테고리의 다른 글

C // 포인터  (0) 2017.12.19
C // 1차원배열  (0) 2017.12.18
C // 변수  (0) 2017.12.15
C // 함수  (0) 2017.12.13
C// 조건에 따른 흐름의 분기  (0) 2017.12.11

+ Recent posts