[Algorithm /인프런] 재귀함수

2023. 11. 1. 13:00Algorithm/JAVA

[문제]
자연수 N이 입력되면 재귀함수를 이용하여 1부터 N까지를 출력하는 프로그램을 작성하세요.


[입력설명]
첫 번째 줄은 정수 N(3<=N<=10)이 입력된다.


[출력설명]
첫째 줄에 출력한다.


[입력예제 1]
3


[ 출력예제 1]
1 2 3

 

[문제 해결]

package section7_recursive_tree_graph;

import java.util.Scanner;

public class Recursive_StackFrame {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		Recursive_StackFrame rs = new Recursive_StackFrame();
		
		//rs.solution(num, 1);
		rs.DFS(num);
	}
	//내가 푼 것
	public int solution(int num, int param) {
		if(num >=1) {
			System.out.print(param+" ");
			return solution(--num, param+1);
		}
		else
			return -1;
	}
	
	//강의 풀이
	public void DFS(int n) {
		if(n == 0) return; //함수 종료의 의미
		/*
		 * 함수가 호출되면, Stack Frame이 생긴다. 
		  처음에 D(3)이 호출 되면, 복귀주소, 매개변수 정보, 지역변수 정보가 저장된다.
		  그다음 D(2) => D3으로 복귀할 주소
		  D(1) => D2으로 복귀할 주소
		 */
		else {
			/*
			 D(3) - a 호출 후, D(2)로 D(3)-b 대기상태
			 D(2) - a 호출 후, D(1)로 D(2)-b 대기상태
			 D(1) - a 호출 후, D(0)로 D(1)-b 대기상태
			 D(0) 호출 완료. 
			 */
			/*
			  D(0)가 끝난 후 pop(), 그 이후 D(1)으로 복귀.
			  D(1)복귀 후, D(1)-b 실행 후 D(1).pop() => 그 이후 D(2)으로 복귀
			  D(2)복귀 후, D(2)-b 실행 후 D(2).pop() => 그 이후 D(3)으로 복귀
			  D(3)복귀 후, D(3)-b 실행 후 D(3).pop(). 완료 
			 */
			DFS(n-1); //a
			System.out.print(n+" "); //b
		}
	}
}