C

[c언어] 재귀 - 팩토리얼

stdlib.h 2016. 3. 28. 20:03

팩토리얼이란 숫자! 라는 기호로 나타낼수 있는데, 이 뜻은

n! 일 경우 1부터 n 까지의 수를 모두 곱한값이란 뜻이다.

고로 만약 5! 인경우 값은 1*2*3*4*5 = 120 이다.

이를 재귀함수로 구현하면, 함수안에서 리턴할때 n-1 값을 다시 호출하면 되는데,

이를 구현하면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int fact(int n);
 
int main(void)
{
    int c;
    scanf("%d", &c);
    printf("%d", fact(c));
}
int fact(int n)
{
 
    if(n==1)
        return n;
    else
        return n*fact(n-1);
}
 
cs

코드를 설명하자면 면저 함수 fact 의 프로토타입을 선언해주었고,
C값을 입력받아 팩토리얼의 인자로 넘겼다.

팩토리얼 내부에서는 C가 N 에 복사되어 N 을 가지고 비교할테고,
N 이 1이 아니니, N이 1이 될때까지 N * n-1 *n-2*n-3.... 을 반복하다가
N 이 1이되면 1을 반환하여
만약 c에 5를 입력했다고 하면,
5 * 4 *3 * 2 * 1 식의 순서로 연산이 된다.