반응형
재귀호출(recursive call)이란?
메서드의 내부에서 메서드 자신을 다시 호출하는 것
재귀호출을 하는 메서드를 재귀 메서드라 한다.
무한히 자기 자신을 호출하기 때문에 무한 반목에 빠질 수 있어 조건문이 필수적으로 따라다닌다.
void method() { // 재귀 메서드
if (n == 0) return;
System.out.println(n);
method(--n); // 재귀 호출
// while(n != 0) {
// System.out.println(--n);
// }
}
재귀호출을 왜 사용하는가?
일반적인 반복문보다 재귀호출을 사용할 경우 수행시간이 더 오래 걸린다.
하지만 재귀호출이 주는 논리적 간결함 때문에 몇 겹의 반복문과 조건문 으로 복잡하게 작성된 코드가 재귀호출로 작성하면 보다 단순한 구조로 바뀔 수 있어, 논리적 오류가 발생할 확율도 줄어들고 유지보수 하기 좋다.
중복 반복문이 너무 복잡하다면 재귀호출로 간단히 할 수 없는지 고민해 볼 필요가 있다.
하지만 재귀호출은 비효율적이므로 재귀호출에 드는 비용보다 재귀호출의 간결함이 주는 이득이 충분히 큰 경우에만 사용해야 한다.
// 팩로리얼(factorial) 예제 - 한 숫자가 1이 될 때까지 1씩 감소하면서 계속해서 곱해 나가는 것
class FactorialTest {
public static void main(String args[]) {
int result = factorial(4);
}
static int factorial(int n) {
int result = 0;
if (n == 1) { // 조건문
result = 1;
} else {
result = n * factorial(n-1);
}
return result;
}
}
반응형
'Java' 카테고리의 다른 글
상속(inheritance) (0) | 2021.09.14 |
---|---|
변수의 초기화 (0) | 2021.09.14 |
오버로딩(overloading) (0) | 2021.09.14 |
생성자(constructor) (0) | 2021.09.14 |
메서드(method) (0) | 2021.09.13 |