JAVA/java 이론

[자바JAVA] 재귀호출, 팩토리얼

자바칩 프라푸치노 2020. 10. 9. 12:37

오늘은 재귀호출에 대해서 알아보겠습니다.

재귀호출이란

메서드 내에서 자기자신을 반복적으로 호출하는 것입니다.

 

팩토리얼, 제곱, 트리운행, 폴더목록표시 등에 쓰입니다.

코드로 확인해봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package sec03_exam;
 
public class FactorialEx {
 
    public static void main(String[] args) {
        long result = FactorialEx.factorial(5L);
        System.out.println("5!의 값: " + result);
    }
 
    //자기자신을 호출하는 재귀
    private static long factorial(long n) {
        long result = 0L;
        //n이 1일때 재귀호출이 더 이상 안이루어진다.
        if (n==1) {
            result = 1;
        }
        else {
            result = n*factorial(n-1);//메서드 자기 자신의 값을 호출한다.
            System.out.println("result 의 값: "+ result + ",n의 값: " + n);
        }
        return result;
    }
 
}
 
cs

 

factorial 메서드를 보시면

매개변수로 long타입인 n을 받고 있고

메서드가 실행하면 long타입인 result를 0으로 초기화 하고 있습니다.

main에서 factorial메서드를 불렀는데 5를 주면서 불렀습니다.

그러면 이제 메서드로 들어가보시죠.

 

5가 들어왔습니다.

n은 1이 아니므로 else문을 실행합니다.

result 는 0 이었는데 5 * factorial(4)의 값을 저장하게 됩니다.

factorial메서드를 또 불렀습니다.

 

이번에는 4가 들어왔습니다.

n이 1이 아니므로 else문을 실행합니다.

result 는 아까 5*4*factorial(3)의 값을 저장하게 됩니다.

factorial메서드를 또 불렀습니다.

 

이번에는 3이 들어왔습니다.

반복하다보면

result 에는 5*4*3*2*1이 저장됩니다.

 

<출력결과>

 

728x90