반응형
-해법
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 출력.
재귀 호출은 결국 맨 아래서 부터 올라오는 느낌이라고 생각한다..
반응형