문제

팩토리얼 백준 10872번


리뷰

정수 N(0 ≤ N ≤ 12)가 주어진다. 이때, N!을 출력하는 프로그램을 작성하는 문제다.

0! 은 0이라고 틀리게 알아서 처음에 풀 때 틀렸다. 질문게시판 FAQ 글 읽고 알았다.

0! 은 1이다

그 이유는 다음과 같다.

4! = 4 x 3 x 2 x 1 
    = 4 x (4-1)!
    = 4 x 3!

위의 논리를 1 팩토리얼에 적용해본다.

1! = 1 x (1-1)!
    = 1 x 0! = 1
    = 1! 은 1이다.  ( 1! = 1 )
    따라서 0! == 1 

코드

#include <iostream> 
using namespace std;

int main(void){

    int N = 0;
    long long answer = 1;
    cin >> N;

    for(int i = 1; i <= N; i++){
        answer = answer * i;    
    }
    cout << answer;

    return 0;    
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

소수 찾기 백준 1978번  (0) 2020.09.13
팩토리얼 0의 개수 백준 1676번 c++  (0) 2020.09.12
스타트와 링크 백준 14889번  (0) 2020.09.10
Two Dots 백준 16929번  (0) 2020.09.09
섬의 개수 백준 4963번  (0) 2020.09.08

재귀함수 (Recursive)

 

재귀함수가 호출되면, 재귀함수의 복사본이 만들어져서 복사본이 호출되어 실행된다.

재귀함수의 탈출 조건이 중요하다.

 

다음은 팩토리얼(factorial) 값을 반환하는 함수를 재귀적으로 구현한 코드다. 

정수 n의 팩토리얼 n!을 수식적으로 나타내면 다음과 같다. 

n! = n * (n-1) * (n-2) * ..... 2 * 1;

 

정수 n 에 대하여 

n>=1인 경우 n * f(n-1)을 반환하고 

n==0인 경우 1을 반환한다 

 

#include <stdio.h>

int Recursive(int num)
{
	if (num == 0)
		return 1;
	else
		return Recursive(num - 1)*num;
}

int main()
{
	printf("%d!\n", Recursive(8));
	printf("%d!\n", Recursive(5));
	printf("%d!\n", Recursive(3));
	printf("%d!\n", Recursive(2));
	printf("%d!\n", Recursive(1));
	return 0;
}

 

 

728x90

+ Recent posts