상세 컨텐츠

본문 제목

< 백준 BaekJoon : 17478번 재귀함수가 뭔가요? > C++

C++/Baekjoon

by J2on 2022. 7. 15. 02:01

본문

<< 문제 >>

https://www.acmicpc.net/problem/17478

 

17478번: 재귀함수가 뭔가요?

평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대

www.acmicpc.net

<<풀이>>

재귀함수가 뭔가요?

"재귀함수는 자기 자신을 호출하는 함수라네"

 

이 문제에 나온 대로 재귀함수는 자기 자신을 호출하는 함수입니다.

쉽게 생각하면 a라는 함수 안에 a를 호출하는 코드가 존재한다는 것입니다.

 

이게 생각보다 이해가 잘 안되는데 그림으로 설명하면 다음과 같습니다.

저는 이렇게 이해했습니다.

모든 차수가 같은 a라는 함수를 실행한다는 점이 중요합니다.

 

사실 저 같은 초보자에게는 좀 어려운 개념입니다.

그래도 이 문제는 좀 쉬운편이네요.

 

<<코드>>

#include <stdio.h>

/*
  BaekJoon_17478 : 재귀함수가 뭔가요?
  input = 숫자 단 하나

*/
void makeUnderscore(int numCount){
  for (int i = 0; i < numCount; i++) {
		printf("%s", "____");
	}
}

void printStory(int numCount, int numInput) {
	// 첫 회차에만 출력
	if (numCount == 0) {
		printf(
			"%s",
			"어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
	}

	makeUnderscore(numCount);
	printf("%s", "\"재귀함수가 뭔가요?\"\n");

	if (numInput == numCount) {
		makeUnderscore(numCount);
		printf("%s", "\"재귀함수는 자기 자신을 호출하는 함수라네\"\n");
		return;
	}

	makeUnderscore(numCount);
	printf(
		"%s",
		"\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 "
		"선인이 있었어.\n");
	makeUnderscore(numCount);
	printf(
		"%s",
		"마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 "
		"대답해 주었지.\n");
	makeUnderscore(numCount);
	printf(
		"%s",
		"그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 "
		"찾아와서 물었어.\"\n");

	numCount++;
	printStory(numCount, numInput);

	makeUnderscore(numCount);
	printf("%s", "라고 답변하였지.\n");

	if (numCount == 1) {
		printf("%s", "라고 답변하였지.\n");
	}
}

int main() {
	int numInput;
	scanf("%d", &numInput);
	int numCount = 0;
	printStory(numCount, numInput);
}

Underscore == _

 

그림에 나타낸 것처럼 1차 2차 회차를 올려가며 목표 회차에 도달했을 때 그 회차의 함수를 종료시키면 그 전 회차 함수들이 순서대로 종료됩니다.

 

<<깃헙>>

https://github.com/J2on/BaekjoonOnlineJudge/blob/master/V2/BaekJoon_17478.cpp

 

GitHub - J2on/BaekjoonOnlineJudge: My Study

My Study. Contribute to J2on/BaekjoonOnlineJudge development by creating an account on GitHub.

github.com

관련글 더보기

댓글 영역