*문제
자연수 N이 주어지면 재귀함수를 이용해서 아래와 같이 출력하시오.
스택을 이용하는 재귀함수
입력
3
출력
1 2 3
*코드구현
// 56번 - 재귀함수 (기본)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std;
//반환하는 건 아니고 출력함수라서 void
void recur(int x) {
if (x == 0) return; //종료지점
else {
recur(x - 1);
printf("%d ", x);
}
}
int main() {
int n;
scanf("%d", &n);
recur(n);
}
* 주의!
//recur과 printf의 순서를 바꾸면
//1 2 3 => 3 2 1 됨
//c언어는 stack을 이용해서 재귀하기때문
D(3) - 9라인까지 했다고 스택에 저장
D(2) - 9라인까지 했다고 스택에 저장
....
=> 9라인에서 재귀되니깐
함수가 자기 할 일을 다 했다면 스택에서 빠져나간다.
스택에 있는 최 상단에 있는 것들이 실행된다.
D(1) - 9 라인까지 했으니, 10라인인 printf 이후 마저 끝내고 스택에서 빠져 나감
'[알고리즘] 문제풀이 연습' 카테고리의 다른 글
[알골90제] 58번 - 이진트리 깊이우선탐색(DFS) (0) | 2019.08.01 |
---|---|
[알골90제] 57번 - 재귀함수(STACK) - 2진수 출력 (0) | 2019.07.31 |
[알골90제] 55번 - 기차운행 : STACK 응용 (0) | 2019.07.31 |
[알골90제] 54번 - 올바른 괄호 : STACK 이용 (0) | 2019.07.30 |
[알골90제] 53번 - K진수 출력 : 스택 자료구조 (0) | 2019.07.30 |