반응형
재귀함수의 요건에는 두 가지가 있다.
하나는 재귀함수가 탈출할 수 있도록 재귀를 할 때마다 값에 변화를 탈출 조건에 다가가게 설정하는 것이고
하나는 그 탈출 조건, 즉 탈출구를 만드는 것이다.
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는
마지막 재귀함수로 배열의 크기가 커지기도 전이기 때문이다.
반응형
'Java > Simple code' 카테고리의 다른 글
Java 문자열을 char배열로 (.toCharArray()) (1) | 2023.01.27 |
---|---|
Java Math.sqrt 없이 제곱근 구하기 (바빌로니아 법) (0) | 2023.01.26 |
Java 숫자 반올림, 올림, 내림(Math)+ 소수점 n번째 자리에서 반올림 (0) | 2023.01.23 |
Java 제네릭(Generic) 메서드 (0) | 2023.01.23 |
Java_제네릭(Generic) 클래스 (0) | 2023.01.23 |