profile image

L o a d i n g . . .

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


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int userNum = scanner.nextInt();
        scanner.close();

        int factSum = factorial(userNum);
        System.out.println(factSum);
    }

    public static int factorial (int factNum) {
        if (factNum <= 1) {
            return 1;
        } else {
            return factNum * factorial(factNum - 1);
        }
    }
}

재귀란?

(좌) 화면 녹화 프로그램에서의 재귀 / (우) 재귀를 재밌게 표현한 사진

- 자기 자신을 정의할 때 자신을 재참조 하는 방법

- 재귀가 깊어지면 Stack OverFlow 에러 발생

- 함수를 반복적으로 호출하므로 메모리에 스택되므로 메모리를 많이 차지하게 됨

- 재귀 함수가 끝날 때는 함수를 닫으면서 스택된 메모리에서 pop을 해서 수행시간 또한 매우 느려짐

스택의 구조

// 스택 (Stack): 리스트의 한쪽 끝으로는 자료의 삽입, 한쪽은 자료의 삭제가 이루어지는 자료구조, 데이터를 쌓아놓은 더미라고 생각하면 편함


풀이

        Scanner scanner = new Scanner(System.in);

        int user_Num = scanner.nextInt();
        scanner.close();

 

사용자로부터 입력을 받기 위해 Scanner 클래스를 사용합니다.

입력을 받고 끝났으면 close() 메소드를 이용하여 해제 합니다.

 

    public static int factorial (int fact_Num) {
        if (fact_Num <= 1) {
            return 1;
        } else {
            return fact_Num * factorial(fact_Num - 1);
        }
    }

팩토리얼을 실행할 메서드를 만듭니다. 파라미터로 숫자를 받아야 합니다.

0! = 1 이기 때문에, 1이거나 0이라면 1을 반환합니다.

그 외에 값이라면 전달받은 값 * factorial(전달받은 값 - 1); 을 하여 재귀를 구성합니다.

 

        int fact_Sum = factorial(user_Num);
        System.out.println(fact_Sum);

factorial() 메서드에 사용자가 입력한 값을 전달합니다. 이후, factorial() 메서드에서 계산된 값을 fact_sum 변수에 대입하고 출력합니다.


출처

1.https://ko.wikipedia.org/wiki/%EC%9E%AC%EA%B7%80_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)

2. https://www.goodgag.net/122099

3. https://st-lab.tistory.com/93

4. https://wayhome25.github.io/etc/2017/12/31/parameter-argument/

'백준 > Java' 카테고리의 다른 글

[백준][Java] 10951 - A+B - 4  (0) 2023.07.10
[백준][Java] 10950 - A+B - 3  (0) 2023.07.10
[백준][Java] 2753 - 윤년  (0) 2023.07.06
[백준][Java] 14681 - 사분면 고르기  (0) 2023.07.04
[백준][Java] 11382 - 꼬마 정민  (0) 2023.07.04
복사했습니다!