제로칼로리 2023. 2. 5. 21:12

코드

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