[백준,BOJ 10872] 팩토리얼(JAVA 구현)
코테/백준 온라인 저지(BOJ)

[백준,BOJ 10872] 팩토리얼(JAVA 구현)

반응형

-해법

import java.util.Scanner;

public class Main{
	
	static int factorial(int n) {
		if(n == 0) return 1; // n이 0이면 1이므로 리턴하여 무한 루프 방지
		else { // 나머지의 경우
			return n*factorial(n-1); // 자신 * 자신-1의 팩토리얼 값을 지속적으로 호출, 리턴해준다.			
		}
	}
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        
        int n = in.nextInt();
        
        System.out.println(factorial(n)); // 출력!
        
    }
}

재귀 알고리즘의 첫 문제이자 대표 문제라 할 수 있는 팩토리얼이다. 재귀는 항상 팩토리얼을 풀 땐 쉬운데... 다른 재귀 문제는 머리가 터져버릴 것 같다....ㅋㅋㅋㅋ 4를 입력했다 가정한 진행과정은.

 

  1. factorial(4)의 호출 시 4 * factorial(3)을 호출

  2. factorial(3)호출 시 3 * factorial(2)를 호출

  3. factorial(2)호출 시 2 * factorial(1)을 호출

  4. factorial(1)호출 시 1 * factorial(0)을 호출

  5. factorial(0)은 종료 조건으로 1을 반환

  4. 다시 거꾸로 올라가면서 factorial(1) == 1을 반환

  3. factorial(2) == 2를 반환

  2. factorial(3) == 6을 반환

  1. factorial(4) == 24를 반환 후 모든 호출 종료.

  0. 결과 24 출력.

 

  재귀 호출은 결국 맨 아래서 부터 올라오는 느낌이라고 생각한다..

반응형