반응형
재귀 함수(Recursion)란?
특정 함수 내에서 자기 자신을 호출하는 함수이다. 재귀 함수를 잘 활용하면 반복적인 작업을 해야 하는 문제를 좀 더 간결하게 풀어낼 수 있다.
public void recursion() {
System.out.println("This is");
System.out.println("recursion!");
recursion();
}
재귀 함수 사용 조건
- 문제의 크기를 점점 작은 단위로 쪼갤 수 있어야 한다.
- 재귀 호출이 종료되는 시점이 존재해야 한다.
재귀 함수의 장점
- 불필요하게 여러 개의 반복문을 사용하지 않기 때문에, 코드가 간결해지고, 수정이 용이하다.
- 변수를 여러 개 사용할 필요가 없다.
재귀 함수의 단점
- 코드의 흐름을 직관적으로 파악하기 어렵다.
- 반복하여 메서드를 호출하며 지역변수, 매개변수, 반환 값을 모두 process stack에 저장한다. 이러한 과정은 많은 메모리를 사용하게 된다.
- 메서드를 호출하고 메서드가 종료된 이후에 복귀를 위한 컨텍스트 스위칭 비용이 발생한다.
반응형
재귀 함수 예제
일반적인 재귀 함수의 템플릿
public type recursive(input1, input2, ...) {
// Base Case : 문제를 더 이상 쪼갤 수 없는 경우
if (문제를 더 이상 쪼갤 수 없을 경우) {
return 단순한 문제의 해답;
}
// recursive Case
// 그렇지 않은 경우
return 더 작은 문제로 새롭게 정의된 문제
}
구구단 만들기
// 반복문으로 구현한 구구단 메서드
public void Gugudan(int level) {
for(int count = 0; count < 9; count++) {
System.out.printf("%d x %d = %d\n", level, count, level * count);
}
}
// 재귀 호출로 구현한 구구단 메서드
public void Gugudan(int level, int count) {
if(count > 9) {
return;
}
System.out.printf("%d x %d = %d\n", level, count, level*count);
Gugudan(level, ++count);
}
팩토리얼 (factorial) 만들기
// 반복문으로 구현한 팩토리얼 메서드
public int Factorial(int number) {
int result = 1;
for(int count = number; count > 0; count--) {
result = result * count;
}
return result;
}
// 재귀 호출로 구현한 팩토리얼 메서드
public int Factorial(int number) {
if(number <= 1) {
return 1;
}
return number * Factorial(number - 1);
}
반응형
'Language > Java' 카테고리의 다른 글
[Java] BufferedReader와 BufferedWriter 정리 (1) | 2022.10.01 |
---|---|
[Java] 열거형 (enum) 정리 (1) | 2022.09.29 |
[Java / 자료구조] 이진 탐색 트리 (Binary Search Tree) 정리 (8) | 2022.09.28 |
[Java] Map 정리 (4) | 2022.09.28 |
[Java / 자료구조] 그래프 (Graph) 정리 (0) | 2022.09.26 |