void func(..) {
...
func(..);
...
}
재귀 호출하는 함수 Code01 을 작성 후 실행해보자.
public class Code01 {
public static void main(String [] args) {
func();
}
public static void func() {
System.out.println("Hello...");
func();
}
}
→ 무한 루프에 빠지게 될 것. 그렇다면 Recursion 은 항상 무한루프에 빠질까?
꼭 그런 것은 아니다. 이는 우리가 Recursion 을 어떻게 작성하는지에 따라 무한루프에 빠지지 않고 우리가 원하는 일을 하도록 만들 수 있다.
public class Code02 {
public static void main(String [] args) {
int n = 4;
func(n);
}
public static void func(int k) {
if (k <= 0)
return;
else {
System.out.println("Hello..");
func(k-1);
}
}
}

→ 이 함수는 저번 함수와 다르다. 이는 입력으로 어떠한 매개변수 k 가 주어지고 그 k 가 0 이하라면 더이상 자기자신을 호출하지 않은 채 그냥 리턴하고, 그렇지 않은 경우에만 Hello 를 입력하고 자기자신을 다시 호출한다. 이때 자신을 호출 시 자신이 받은 매개변수 k 를 그대로 넘겨주는 것이 아닌 k-1 을 매개변수로 넘어주는 형태.
그렇다면 Recursion 이 무한루프에 빠지지 않게 하기 위한 조건은 무엇일까?
예시를 몇 개 살펴보도록 하자.
public class Code01 {
public static void main(String [] args) {
int result = func(4);
System.out.print(result);
}
public static int func(int n) {
if (n <= 0)
return 0;
else {
return n+func(n-1);
}
}
}

→ 결국이 func 란 함수는 자신이 입력을 받은 정수 n 에 대해 1까지 n 까지의 합을 구하는 작업을 수행