Repitition

이성준·2023년 7월 17일

Java Notes

목록 보기
2/5

Repitition

Recursion

다음은 음이 아닌 정수 n의 factorial을 정의하는 등식(equation).

n!=n(n1)!(n>0)n ! = n \cdot (n-1)! \quad (n > 0)

따라서 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
profile
기록

0개의 댓글