오늘은 팩토리얼 문제를 풀어보려고 한다. 10872번 문제이고, 팩토리얼을 구현하는 문제이다.
https://www.acmicpc.net/problem/10872
10872번: 팩토리얼
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
www.acmicpc.net
문제 설명
이 문제는 정수 N을 입력 받아 N!을 구해서 출력하면 된다. 아주 간단하다. 고등학생 때 배우는 내용인 팩토리얼은 아래와 같은 식을 쓴다.
3! = 3 x 2 x 1
이렇게 N을 입력 받으면 N부터 1까지 1씩 감소하면서 곱하는 것이 바로 팩토리얼이다. 그럼 이것을 함수로 구현하면 되는데, 이때 많이 쓰는 함수가 바로 재귀함수이다.
문제 풀이
팩토리얼 함수 구현을 위한 재귀함수를 먼저 구현해보자. 아래와 같이 코드를 작성할 수 있다.
int fac(int num)
{
if(num>1)
num *= fac(num-1);
else
num = 1;
return num;
}
정수를 반환할 수 있는 함수를 생성하고, num에 팩토리얼 함수의 반환값을 곱해주면 된다. 함수 fac에 3을 넣었다고 가정해보자. 3은 1보다 크므로 fac 함수에 2가 들어가고, 그 결과값을 3과 곱하게 된다. 그럼 그 결과값이 몇인지 fac함수를 통해 계산해보자. 2가 들어갔으므로 1보다 큰 2는 1이 되어 fac함수에 다시 들어가게 된다. 1이 들어올 경우 그대로 1을 반환한다. 그럼 3x2x1이 된다. 그리고 이 값을 리턴하면 된다.
전체 코드
#include <iostream>
using namespace std;
int fac(int num)
{
if(num>1)
num *= fac(num-1);
else
num = 1;
return num;
}
int main()
{
int N;
cin >> N;
int result = fac(N);
cout << result << endl;
return 0;
}
팩토리얼 함수의 반환값을 변수 result에 받아서 출력해주면 된다. 팩토리얼 함수를 작성할 때 고려해야 할 것은 N이 1일 경우이다. 1팩토리얼은 1이기 때문에 해당 값이 들어왔을 때 1을 출력할 수 있도록 하면 된다.
오늘은 팩토리얼에 대해서 공부하고 코드로 구현해 보았다. 팩토리얼의 특성을 이해하고 재귀함수를 코드로 구현하는 연습을 해보면 좋겠다.
'C++' 카테고리의 다른 글
[C/C++] 순열과 조합 알고리즘 구현하기 1 (0) | 2024.12.24 |
---|---|
15649 C++ 백트래킹 문제 풀이 (0) | 2024.02.06 |
공백을 포함한 문자열 입력 받기 (getline 함수 활용하기) (0) | 2024.02.05 |
C++ 가상 함수 공부하기 - virtual 함수 (1) | 2023.05.23 |
C++ char형 배열 출력하기 (0) | 2023.05.22 |