[Algorithm /인프런] 재귀함수
2023. 11. 1. 13:00ㆍAlgorithm/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
}
}
}
'Algorithm > JAVA' 카테고리의 다른 글
[Algorithm /백준] N과 M (1) (1) | 2023.11.02 |
---|---|
[Algorithm /백준 ] 수 찾기 (+ 문제 이해 ) (0) | 2023.11.02 |
[Algorithm /프로그래머스] 짝지어 제거하기 (0) | 2023.10.31 |
[Algorithm /프로그래머스] 카펫 (0) | 2023.10.31 |
[Algorithm /프로그래머스] 이진 변환 반복하기 (0) | 2023.10.30 |