// 재귀 호출을 사용할 때는 항상 종료 조건을 명확하게 정의해야 함
--> 종료 조건을 제대로 정의하지 않으면 무한 재귀에 빠져서 프로그램이 정상적으로 동작하지 않을 수 있음
public int doProcess() {
System.out.println("안녕!");
// doProcess();
// (주석 떼면) 무한반복! 안녕출력, 다시 doProcess돌아가서 안녕출력..... exception!!!
return 1;
}
package p4;
public class Main {
public static void main(String[] args) {
new Test().doProcess();
new Test().doProcess(10);
System.out.println("==여기부터==");
int sum = new Test().doProcess(3);
System.out.println(sum); //6
}
}
public int doProcess(int value) {
System.out.println("===============");
if(value <= 0) {
// Q. 왜 == 이 아니야? / A.count가 0 또는 음수인 경우에도 종료되므로 보다 일반적인 상황에 사용할 수 있음!
// 주로, count 값이 특정 범위 내에 있을 때 재귀를 종료하려는 경우에 사용됨 (갑자기 1에서 -1로 넘어갈 수도 있잖아? )
return 0;
}
System.out.println("반가워!");
int sum = doProcess(value - 1); // 재귀 호출
System.out.println(sum + "언제호출되냐");
System.out.println(value + "이것이 value값");
return sum + value;
// doProcess 메서드가 재귀적으로 호출되면서 value를 감소시키고, 그 결과를 sum에 누적하게 됨
// ---> doProcess가 종료될 때 sum에는 value부터 1까지의 합이 계산되어 반환되는 것!!!!
}
// 예를 들어, doProcess(3)을 호출하는 경우:
//
// value는 3이므로 if (value <= 0) 조건이 충족되지 않습니다.
// "반가워!"가 출력되고, doProcess(value - 1)로 doProcess(2)를 호출합니다.
// doProcess(2)는 마찬가지로 doProcess(1)을 호출하고, doProcess(1)은 doProcess(0)을 호출합니다.
// ★★★ 재귀 호출은 이제 doProcess(0)부터 역순으로 종료 조건에 도달하게 됩니다. ★★★
//
// doProcess(0)에서는 value가 0이므로 종료 조건이 만족되고 0을 반환합니다.
// doProcess(1)은 sum에 0을 더하고, 1을 반환합니다.
// doProcess(2)는 sum에 1을 더하고, 3을 반환합니다.
// 마지막으로, doProcess(3)은 sum에 3을 더하고, 6을 반환합니다.
// 따라서 doProcess(3)의 반환 값은 6이 됩니다.
## 좀 더 쉬운 함수
public int doProcess2(int value) {
int sum = value;
if(value <= 0) {
return 0;
}
System.out.println("안녕");
value--;
System.out.println(value);
sum += doProcess(value);
System.out.println(value);
return sum;
}
'JAVA > DAY 13 _ 23.09.04' 카테고리의 다른 글
Annotation (0) | 2023.09.11 |
---|---|
folder (0) | 2023.09.11 |
Single Tone Pattern (0) | 2023.09.11 |
Final (0) | 2023.09.11 |
Static2 (0) | 2023.09.11 |