다음은 음이 아닌 정수 n의 factorial을 정의하는 등식(equation).
따라서 factorial 메서드는 다음과 같이 표현할 수 있다.
public static int factorial(int n){
return n * factorial(n - 1);
}
매개변수로 5를 넘겨 factorial(5) 를 실행해보자. 그러면, java.lang.StackOverflowError 가 발생할 것이다.
특별히 코드에 문제가 있는 것은 아니고, return 이 명시되어 있지만 실제로 정수 n 에 대한 메서드 실행이 양수에서 끝나지 않고 음수의 영역까지 실행되어서 메모리 초과가 발생한 것이다. 따라서 n > 0 조건을 추가해주었다.
public static int factorial(int n){
return n > 0 ? n * factorial(n - 1) : 1;
}
parameter n 이 0 이하일 경우 1을 반환하도록 하였다.
package repetition.recursion;
public class TestMathx {
public static void main(String[] args) {
System.out.println(factorial(Integer.parseInt(args[0])));
}
public static int factorial(int n){
return n > 0 ? n * factorial(n - 1) : 1;
}
}
완성된 TestMathx 클래스이고, 실행 결과는 다음과 같다.
> java repetition.recursion.TestMathx 10
3628800