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

Se0ng_1l·2022년 6월 29일
0

백준

목록 보기
14/40

재귀함수를 응용하여 푸는 문제다.
입력 값을 참조에 의한 호출로 함수의 매개변수로 넣고
입력값과 기본 매개변수의 값을 비교하여
크다면 질문, 같거나 작다면 답변을 하는 식으로 하여
입력값이 음수가 되면 재귀함수를 빠져나가는 식으로 구현하였다.

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

#include <iostream>
#include <string>
using namespace std;

string text1[4] = { "\"재귀함수가 뭔가요?\"",
                    "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.",
                    "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.",
                    "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\""};
string text2[2] = { "\"재귀함수가 뭔가요?\"", "\"재귀함수는 자기 자신을 호출하는 함수라네\""};

void recursion(int &n, int a = 0)
{
    if(n >= 0)
    {
        if(a < n)
        {
            for(int i = 0; i < 4; i++)
            {
                for(int j = 0; j < a; j++)
                {
                    cout << "____";
                }
                cout << text1[i] << endl;
            }
        }
        if(a == n)
        {
            for(int i = 0; i < 2; i++)
            {
                for(int j = 0; j < a; j++)
                {
                    cout << "____";
                }
                cout << text2[i] << endl;
            }
        }
        if(a > n)
        {
            for(int j = 0; j < n; j++)
            {
                cout << "____";
            }
            cout << "라고 답변하였지." << endl;
            recursion(--n, a);
        }
        recursion(n, ++a);
    }
    if(n < 0)
    {
        return;
    }
}
int main()
{
    int n;
    cin >> n;
    cout << "어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다." << endl;
    recursion(n);
}
profile
치타가 되고 싶은 취준생

0개의 댓글