Java

재귀호출(recursive call)

Beekei 2021. 9. 14. 13:38
반응형

재귀호출(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;
	}

}

 

반응형