공부/백준(C++) - 2022~

백준 10872번: 팩토리얼 [C++]

상연 2022. 1. 23. 15:19

목차

    https://www.acmicpc.net/problem/10872

     

    10872번: 팩토리얼

    0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

    www.acmicpc.net

    코드

    #include <iostream>
    using namespace std;
    
    int factorial(int n)
    {
    	if(n <= 2)
    	{
    		if(n == 0) return 1;
    		else return n;
    	}
    	else
    	{
    		return n * factorial(n - 1);
    	}
    	
    }
    
    int main() {
    	int n;
    	cin >> n;
    	cout << factorial(n);
    	return 0;
    }

    설명

    재귀함수를 단박에 이해할수 있을거라고 생각되는 예시

    하나의 함수에서 자기 자신을 다시 호출하여 푸는 재귀함수문제인데

    사실 팩토리얼... 재귀함수로 안 풀어도 된다.

    재귀함수 자체가 좀 리소스 측면에서는 영 꽝이지만 구현이 간단하다는 장점이 있는거라.

    팩토리얼을 재귀로 풀면 자기자신인 n에 (n-1)!을 곱해주는 되는것이기 때문에..

    이를 n이 적당히 작아질때(0..정도?)까지 재귀로 계속 반복해주면 풀 수 있는 문제이다.

    머리속으로는 아는데 이걸 풀어서 설명하려고 하니 좀 어렵다.