백준 / 10872 팩토리얼 ( 방법 추가 필요)

dogit·2021년 7월 17일
0

백준문제

목록 보기
10/67

문제

풀이

해당 문제는 재귀함수를 이용하여 푸는 문제이다.
재귀함수가 무엇인가 하면

이렇게 func()라는 함수를 정의하면 그 안에 또 다시 func()이라는 함수를 호출하고 또다시 반복하여 호출하는 함수를 말한다.

이 재귀함수를 사용할 때 주의해야 할 사항이 두가지가 있다.

  1. 재귀호출이 너무 반복적으로 이루어지면(즉, 재귀가 깊어지면) Stack OverFlow라는 에러가 생긴다.
    이 말이 무엇인가 하면 함수를 반복적으로 호출하는 만큼 메모리 스택영역에 그 크기가 엄청 쌓기게 되고 결국 오버플로우가 일어나게 되는 것이다.
    결국 재귀호출로 인해 메모리가 부족해지는 현상이 일어나므로 재귀호출은 알고리즘상 자연스러운 상화 외에는 잘 쓰이지 않는다.

  2. 재귀 함수가 끝나는 지점을 정확하게 구현해야한다.
    재귀는 끝나는 지점이 명확하지 않으면 자칫 무한루프레 빠지기 때문에 확실하게 끝나는 지점을 구현해야한다.

코드

방법 1

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

profile
느리더라도 꾸준하게

0개의 댓글