Java/Simple code

Java 알고리즘 재귀함수에 대한 고민과 기록

검은고양이개발자 2023. 1. 25. 22:00
반응형

 

재귀함수의 요건에는 두 가지가 있다.

 

하나는 재귀함수가 탈출할 수 있도록 재귀를 할 때마다 값에 변화를  탈출 조건에 다가가게 설정하는 것이고

하나는 그 탈출 조건, 즉 탈출구를 만드는 것이다.

 

public class anything {
    static int num;
    static int sum;
    
    public static void main(String[] args) {

        System.out.println(CordJg(0));

    }
    public static int CordJg(int count){

        if(count==5){
           sum = num;
           return sum;
        }

        num=num+1;
        System.out.println(num);    //출력 1,2,3,4,5(재귀가 반복될 때마다 1증가)
        CordJg(count+1);
        return sum;
    }
}
//출력
5

위 코드는 재귀함수를 이용해 나타낸 간단한 코드이다.

 

위에 재귀함수를 만들기 위해 필요한 조건인 탈출구를 if(count==5)인 경우를 통해 만들었고

 

탈출 조건에 다가가게 하기 위해 함수 속 함수인 CordJg()안 인자에 count+1을 넣어

 

count값이 5가 되면 재귀가 끝나도록 설정하였다.

 

static int[] a = new int[]{};

    public static void main(String[] args) {

        System.out.println(Arrays.toString(CordJg(2,a)));

    }
    public static int[] CordJg(int coin,int[] b){
        int[] concatArray = new int[0];

        if(coin==0){

            return concatArray;

        }


        for(int i = 0; i < 3; i++) {

            int number = i;


            concatArray = Arrays.copyOf(b, b.length + 1);
            concatArray[concatArray.length - 1] = number;

            System.out.println(Arrays.toString(concatArray));    --->>>



            CordJg(coin - 1, concatArray);


        }
        return concatArray;
    }
}
//출력-------------------------------
[0] 
[0, 0]
[0, 1]
[0, 2]
[1]
[1, 0]
[1, 1]
[1, 2]
[2]          System.out.println(Arrays.toString(concatArray));에서 출력된 값
[2, 0]
[2, 1]
[2, 2]
----------------------------------------------
[2] return concatArray값 (coin이 0이 됐을 때의 concatArray의 값이니 [2]가 추가된 뒤의 값

위 코드를 살펴보면 재귀함수 내에 for문이 들어있을 경우 어떻게 작용하는지 알 수 있다.

 

재귀함수 안에 for문이 있을 경우  i의 값은 초기값 상태에서 또 다른 재귀함수로 넘어가

또다시  재귀함수 내의 for문이 실행된다.

 

즉 , [0]인 상태에서 재귀함수로 넘어가 배열의 크기는 1칸 커지고 더 이상의 재귀는 없으니

재귀함수 내의 for문이 작동해 [0,0] [0.1] [0,2] 이 출력된다.

그렇게 재귀함수 내의 for문의 작동이 끝나면 그제야 기존의 for문이 작동해 다시 [1]부터 시작해서 같은 작업을 반복한다.

 

결국 재귀 함수 내에서는 [0]부터 시작해서 [2,2]까지 값을 나타내며

재귀함수식의 리턴값이 [2]인 이유는 재귀함수의 탈출 조건인 coin=0 일때의 concatArray는

마지막 재귀함수로 배열의 크기가 커지기도 전이기 때문이다.

반응형