메서드의 내부에서 메서드 자신을 다시 호출하는 것
void method(){
method(); //재귀호출. 메서드 자신을 호출한다.
}
호출된 메서드는 값에 의한 호출(call by value)을 통해 원래의 값이 아닌 복사된 값으로 작업하기 때문에 호출한 메서드와 관계없이 독립적인 작업 수행이 가능하다.
재귀호출은 자기 자신을 호출하기에 무한반복문이 조건문과 사용되는 것과 같이 재귀호출도 조건문이 필수적이다.
팩토리얼(factorial)
package object_oriented_programming;
public 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
package object_oriented_programming;
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의 정석 - (남궁성지음)