728x90
재귀 함수란 자기 자신을 호출하는 함수이다
public void recursion(){
System.out.println("This is recursion!");
recursion();
}
// 출력
This is recursion!
This is recursion!
This is recursion!
This is recursion!
This is recursion!
This is recursion!
...
재귀 함수가 적합한 상황
- 주어진 문제를 비슷한 구조의 더 작은 문제로 나눌 수 있는 경우
- 중첩된 반복문이 많거나 반복문의 중첩 횟수를 예측하기 어려운 경우
- 변수 사용을 줄여 변경 가능한 상태를 제거하여 프로그램 오류가 발생할 수 있는 가능성을 줄이는 경우
장점
- 불필요하게 여러 개의 반복문을 사용하지 않기 때문에, 코드가 간결해지고, 수정이 용이
- 변수를 여러개 사용할 필요가 없음
단점
- 반복문과 달리, 코드의 흐름을 직관적으로 파악하기 어렵다
- 반복하여 매서드를 호출하며 지역변수, 매개변수, 반환 값을 모두 process stack에 저장하게 되어 반복문에 비해 메모리를 더 많이 사용한다
- 메서드를 호출하고 메서드가 종료된 이후에 복귀를 위한 컨텍스트 스위칭 비용이 발생한다
사용하기 위한 조건
- 문제의 크기를 점점 작은 단위로 쪼갤 수 있어야 한다
- 재귀 호출이 종료되는 시점이 존재해야 한다
재귀 함수를 만들기 위한 팁
- 문제를 더 이상 쪼갤 수 없는 부분과 쪼갤 수 있는 부분으로 나누어 본다
ps. 사실 실무에서 사용하는 경우는 거의 없다고 한다
728x90
'개발일지 > 컴퓨터지식' 카테고리의 다른 글
자료구조 큐 Queue (0) | 2022.09.25 |
---|---|
자료구조 스택 Stack (0) | 2022.09.25 |
명령어 옵션 -r 과 -f Linux (0) | 2022.08.27 |
Mac 환경변수 (0) | 2022.08.27 |
Read, Write, Execute 권한 - linux (0) | 2022.08.27 |