코딩테스트

Recursive(재귀)

NellKiM 2025. 4. 8. 18:26

재귀(Recursion)란?

자기 자신을 다시 호출하는 함수

함수 안에서 자기 자신을 다시 호출함으로써 문제를 점점 더 작은 문제로 나누는 방식

예제1)

public class Recursive1 {
//Recursive1 : 0부터 4까지 출력하시오 (1씩 증가 하는 수, 반복문 사용)
//	=> 재귀호출로 변경
	public static void main(String[] args) {
		
//		for(int i=0; i<5; i++) {
//			System.out.println(i);
//		}

		int n=0;
		recursive(n);
	}//main

	private static void recursive(int n) {
		if(n==5)return;		
		System.out.println(n);
		recursive(n+1);//재귀호출을 끝마치고 되돌아 왔을때 기존 n의 값을 유지!!
		recursive(n++);//재귀호출을 한후에 1증가  (n= n+1)
		recursive(++n);//1증가 후 재귀호출      (n= n+1)   
	}

}

 

예제2)

public class Recursive2 {
	
	public static void main(String[] args) {
		int[] arr = {1,3,5,7,9};
		//반복문을 통해 데이터 출력
//		for (int i = 0; i < arr.length; i++) {
//			System.out.println(arr[i]);
//		}
		
		recursive(arr,0);
	}
	private static void recursive(int[] arr,int n) {
		if(n==arr.length) {
			return;
		}
		System.out.println(arr[n]);
		recursive(arr,n+1);
	}

}

 

예제3)

public class Recursive3 {
	
	public static void main(String[] args) {
		int[] arr = {1,3,5,7,9};
		recursive(arr,0,0);
	}
	private static void recursive(int[] arr,int n, int sum) {
		if(n==arr.length) {
			System.out.println(sum);
			return;
		}
		sum += arr[n];
		
		recursive(arr,n+1,sum);
	}

}

 

예제4)

public class Recursive4 {

	public static void main(String[] args) {
		int[] arr = {1,3,5};
//		recursive(arr,0,0);//더하기 할때 초기값
		recursive(arr,0,1);//곱하기 할때 초기값
	}
	
	private static void recursive(int[] arr,int n, int val) {
		if(n==arr.length) {
			System.out.println(val);
			return;
		}
		// 더하기 
//		recursive(arr,n+1,val+arr[n]);
		// 곱하기
		recursive(arr,n+1,val*arr[n]);
	}

}