내 맘대로 알고리즘

03. 팩토리얼 재귀함수 자바


0. 이전글


2018/10/29 - [내 맘대로 알고리즘] - 01. 배열과 집합

2018/10/30 - [내 맘대로 알고리즘] - 02. 빅오 표기법 & 버블소트, 선택정렬


1. 재귀함수?


재귀함수는 자기 자신을 호출하는 함수를 의미합니다. 


1
2
3
public void exampleRecursion() {
        exampleRecursion();
}
cs

해당 예제와 같이 재귀 함수는 자기 자신을 호출합니다.


1
while(true) {exampleRecursion();}
cs


while문을 통한 반복문과 다를게 없습니다. 하지만, 여기에 기저조건이라는 

값이 있다면 특정 조건이 성립할 때까지 돌게 되는 반복문이 됩니다.


2. 기저조건?


우리는 해당 예제를 factorial 구하기를 통해서 알아보도록 하겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class FactorialUtils {
    /**
     * @author gamjatwigim
     * get factorial number with recursion*/
    public static void main(String[] args)
    {
        FactorialUtils factorialUtils = new FactorialUtils();
        int factorial2 = factorialUtils.factorial(2);
        int factorial3 = factorialUtils.factorial(3);
        System.out.println(factorial2);
        System.out.println(factorial3);
    }
    
    public int factorial(int num) {
        if(num==1) {
            return 1;
        }else {
            return num*factorial(num-1);
        }
    }
}
 
cs

기저 조건이란, 무한반복을 피할 수 있는 특정조건을 만족시키는 것이라고 했는데

factorial을 구하는 함수를 보게 되면


return num*factorial(num-1);


을 통해서 해당 매소드는 자기 자신을 계속해서 호출합니다. 그리고,


1
if(num==1) {return 1;}
cs

를 통해서 자기 자신을 호출하지 않고 특정 값을 return하게 됩니다. 이것을 기저조건이라 하며,

해당 값을 통해서 반복문에서 벗어나는 조건이 됩니다.



factorial 재귀함수 해당 그림과 같은 로직으로 값이 만들어지게 되고

기저조건에 의해서 반복문이 종료되게 되는 로직입니다.