해당 문제는 재귀함수를 이용하여 푸는 문제이다.
재귀함수가 무엇인가 하면
이렇게 func()라는 함수를 정의하면 그 안에 또 다시 func()이라는 함수를 호출하고 또다시 반복하여 호출하는 함수를 말한다.
이 재귀함수를 사용할 때 주의해야 할 사항이 두가지가 있다.
재귀호출이 너무 반복적으로 이루어지면(즉, 재귀가 깊어지면) Stack OverFlow라는 에러가 생긴다.
이 말이 무엇인가 하면 함수를 반복적으로 호출하는 만큼 메모리 스택영역에 그 크기가 엄청 쌓기게 되고 결국 오버플로우가 일어나게 되는 것이다.
결국 재귀호출로 인해 메모리가 부족해지는 현상이 일어나므로 재귀호출은 알고리즘상 자연스러운 상화 외에는 잘 쓰이지 않는다.
재귀 함수가 끝나는 지점을 정확하게 구현해야한다.
재귀는 끝나는 지점이 명확하지 않으면 자칫 무한루프레 빠지기 때문에 확실하게 끝나는 지점을 구현해야한다.
public class Num10872 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
in.close();
int sum = factorial(N);
System.out.println(sum);
}
private static int factorial(int N) {
if(N <= 1) {
// 재귀 종료 조건
return 1;
}
// N이 1이하가 아닌 조건에서는
// 계속해서 매개변수를 N-1로 한 재귀함수로 들어간다.
return N*factorial(N-1);
}
}
참조 : https://st-lab.tistory.com/93
출처 : https://www.acmicpc.net/problem/10872