코드
package algorithm07;
public class Main {
//자기 자신을 끊임 없이 호출
static void recursive(int n) {
if (n == 0) //재귀함수는 종료 조건이 가장 중요하다.
return;
else {
System.out.println(n);
recursive(n - 1); //재귀 기준점
System.out.println(n);
}
}
public static void main(String[] args) {
Main.recursive(5);
}
}
결과ㅈ
5
4
3
2
1
1
2
3
4
5
가장 위부터 n은 0 , 1, 2, 3, 4, 5
여기서 0은 탈출조건이다.
재귀함수는 자기자신을 끊임없이 호출하는 함수이다.
그렇기에 끊임없이 호출하는 구조를 빠져나오는 조건이 가장 중요하다.
재귀함수를 실제 사용한다면, 중요한 것은 재귀함수를 호출하기 전/후 작업이다.
위 결과에서 54321 는 재귀를 호출해 나아가며 실행됐다.
반대로 12345는 재귀 끝에 도달하고,(엄밀히 말하면 n==0) 되돌아오면서 실행됐다.
재귀함수는 반복문 보다 성능이 않좋다.
이유는 함수(메서드)이기 때문이다. 메서드는 하나하나가 스택 프레임이 생긴다.
프레임 생성에 따른 비용소모가 발생한다. 또한 메서드이기에 복귀주소, this 생성 등 부차적인 절차가 생긴다.
이런 이유에도 재귀함수를 쓰는 이유는 재귀함수가 주는 코드의 간결함, 가독성 때문이다.
재귀함수의 사용 시 주의할 점은 정도가 심하다면 스택오버플로우가 발생할 수 있다는 점이 있겠다.
대부분 재귀함수는 반복문으로 변경할 수 있으므로, 그럴 땐 반복문을 사용해야 한다.
재귀함수 관련 포스팅
'자료구조&알고리즘 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비' 카테고리의 다른 글
팩토리얼 (재귀) (0) | 2023.02.11 |
---|---|
이진수 구하기(재귀) (0) | 2023.02.08 |
뮤직비디오 (0) | 2022.12.20 |
마구간 정하기 (0) | 2022.12.17 |
장난꾸러기 (0) | 2022.12.09 |