오늘은 재귀호출에 대해서 알아보겠습니다.
재귀호출이란
메서드 내에서 자기자신을 반복적으로 호출하는 것입니다.
팩토리얼, 제곱, 트리운행, 폴더목록표시 등에 쓰입니다.
코드로 확인해봅시다.
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
'JAVA > java 이론' 카테고리의 다른 글
[자바JAVA]final필드와 상수 (0) | 2020.10.10 |
---|---|
[자바JAVA] 메서드 오버로딩 overloading (0) | 2020.10.10 |
[자바JAVA] call by value & call by reference/ 값에 의한 참조 & 주소에 의한 참조 (0) | 2020.10.09 |
[자바JAVA]JVM의 메모리구조- 호출스택 (0) | 2020.10.08 |
[자바JAVA] 객체지향개념2 - 변수와 메서드. 클래스변수. 인스턴스 변수. 지역변수. static메서드. 인스턴스 메서드 (0) | 2020.10.08 |