ⓐ 자기 자신을 호출하는 함수
public class Recursion { public static void main(String[] args) { Func(); } public static void Func() { System.out.println("함수 실행"); Func(); } }
실행 결과 :
함수 실행 함수 실행 함수 실행 함수 실행 함수 실행 함수 실행 함수 실행 ... (무한 루프)
ⓑ 무한 루프에 빠지지 않으려면?
public class Recursion { public static void main(String[] args) { int n = 4; Func(n); } public static void Func(int n) { if (n <= 0) { /* Base case : recursion에 빠지지 않는 경우가 존재해야 한다. */ return; } else { System.out.println("함수 실행"); Func(n - 1); /* Recursive case : recursion을 반복하다보면 결국 Base case로 수렴해야 한다. */ } } }
실행 결과 :
함수 실행 함수 실행 함수 실행 함수 실행 (4번 동작)
ⓒ 1~n 까지의 합
public class Recursion { public static void main(String[] args) { int result = Func(5); } public static void Func(int n) { if (n == 0) { return 0; } else { return n + Func(n - 1); } } }
실행 결과 : Func(int n)은 음이 아닌 정수 n에 대해 0부터 n까지의 합을 계산
15 (결과값)