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 |