Goru
[Java] 재귀호출 본문
재귀호출
메서드 내부에서 메서드 자신을 다시 호출하는 것을 '재귀 호출'이라고 하고, 재귀호출을 하는 메서드를 '재귀 메서드' 라고 한다.
void method( ){ method( ); // 재귀호출. 메서드 자신을 호출한다. } |
' 메서드 호출' 이라는 것이 그저 특정 위치에 있는 명령들을 수행하는 것이다. 호출된 메서드는 '값에 의한 호출'을 통해, 원래의 값이 아닌 복사된 값으로 작업 하기 떄문에 호출한 메서드와 관계 없이 독립적인 작업수행이 가능하다.
void method (int n) {
if(n == 0)
return; // n값이 0일떄, 메서드를 종료한다.
System.out.println(n);
method(--n); //재귀호출. method(int n)을 호출
}
void method(int n){
while(n!=0){
System.out.println(n--);
}
}
대표적인 재귀호출의 예는 팩토리얼을 구하는 것이다. 팩토리얼은 한 숫자가 1이 될 떄까지 1씩 감소시켜가면서
계속 곱해 나가는 것인데 n!(n은 양의 정수)과 같이 표현한다.
f(n) = n * f(n-1), 단 f(1) = 1
class FactorialTest{
public static void main(String[] args){
int result = factorial(4);
System.out.println(result);
}
static int factorial(int n) {
int result = 0;
if( n == 1)
result = 1;
else
result = n * factorial(n-1); // 다시 메서드 자신을 호출한다.
return result;
}
}
실행결과
24
public class FactorialTest2 {
static long factorial(int n) {
if(n<=0 || n>20) return -1; //매개변수의 유효성 검사
if(n <=1) return 1;
return n * factorial(n-1);
}
public static void main(String[] args) {
int n = 21;
long result = 0;
for(int i=1; i <=n; i++) {
result = factorial(i);
if(result ==-1) {
System.out.printf("유효하지 않은 값입니다.(0<n<=20):%d%n", n);
break;
}
System.out.printf("%2d!=%20d%n", i, result);
}
}
1!= 1
2!= 2
3!= 6
4!= 24
5!= 120
6!= 720
7!= 5040
8!= 40320
9!= 362880
10!= 3628800
11!= 39916800
12!= 479001600
13!= 6227020800
14!= 87178291200
15!= 1307674368000
16!= 20922789888000
17!= 355687428096000
18!= 6402373705728000
19!= 121645100408832000
20!= 2432902008176640000
유효하지 않은 값입니다.(0<n<=20):21
'Java' 카테고리의 다른 글
[Java] 오버로딩 (0) | 2022.01.18 |
---|---|
[Java] 클래스 메서드와 인스턴스 메서드 (0) | 2022.01.18 |
[Java] JVM 메모리 구조 (0) | 2022.01.07 |
[Java] 변수와 메서드 (0) | 2022.01.05 |
[Java] 객체지향 언어 (0) | 2022.01.05 |