코드

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 생성 등 부차적인 절차가 생긴다. 

 

이런 이유에도 재귀함수를 쓰는 이유는 재귀함수가 주는 코드의 간결함, 가독성 때문이다.

 

재귀함수의 사용 시 주의할 점은 정도가 심하다면 스택오버플로우가 발생할 수 있다는 점이 있겠다.

대부분 재귀함수는 반복문으로 변경할 수 있으므로, 그럴 땐 반복문을 사용해야 한다.

 

 

재귀함수 관련 포스팅

 

폴더, 파일 수 탐색

import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.text.SimpleDateFormat; import java.util.Date; public class FileDirectoryEx01 { static int dirCount = 0; static int fileCount = 0; public static void main(St

rkwhr0010.tistory.com

 

'자료구조&알고리즘 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비' 카테고리의 다른 글

팩토리얼 (재귀)  (0) 2023.02.11
이진수 구하기(재귀)  (0) 2023.02.08
뮤직비디오  (0) 2022.12.20
마구간 정하기  (0) 2022.12.17
장난꾸러기  (0) 2022.12.09

+ Recent posts