안녕하세요

[node.js] 17478 재귀함수가 뭔가요? (자바스크립트) 재귀 단계 본문

백준 자바스크립트

[node.js] 17478 재귀함수가 뭔가요? (자바스크립트) 재귀 단계

sakuraop 2022. 6. 28. 00:03

17478 재귀함수가 뭔가요?

재귀함수가 무엇인지 물어보는 학생들을 위한 챗봇의 응답을 출력하는 프로그램을 만들어보자. 교수님이 출력을 원하는 재귀 횟수 N(1 ≤ N ≤ 50)이 주어진다.

2

출력 예시를 보고 재귀 횟수에 따른 챗봇의 응답을 출력한다.

어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.
"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
____"재귀함수가 뭔가요?"
____"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
____마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
____그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
________"재귀함수가 뭔가요?"
________"재귀함수는 자기 자신을 호출하는 함수라네"
________라고 답변하였지.
____라고 답변하였지.
라고 답변하였지.

 

제출한 답

let input = Number(require("fs").readFileSync("dev/stdin").toString());

let line = "____";
let count = 0;

console.log(`어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.`);
function recursion(count) {
  if (input == count) {
    console.log(
      `${line.repeat(count)}"재귀함수가 뭔가요?"
${line.repeat(count)}"재귀함수는 자기 자신을 호출하는 함수라네"`
    );
    for (i = count; i > 0; i--) {
      console.log(`${line.repeat(i)}라고 답변하였지.`);
      if (i == 1) return console.log("라고 답변하였지.");
    }
  }
  console.log(
    `${line.repeat(count)}"재귀함수가 뭔가요?"
${line.repeat(count)}"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
${line.repeat(count)}마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
${line.repeat(count)}그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."`
  );
  recursion(count + 1);
}

recursion(count);

코드설명

let line = "____";
let count = 0;
재귀함수를 이용하여 문장을 반복시키는데, 반복이 될 때마다 "____"를 더하여 출력하도록 합니다.
반복의 횟수를 count 합니다.
console.log(`어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.`);
우선 재귀를 필요로 하지 않는 문장으로 시작합니다.
 
console.log(
`${line.repeat(count)}"재귀함수가 뭔가요?"
${line.repeat(count)}"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
${line.repeat(count)}마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
${line.repeat(count)}그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."`
  );
  recursion(count + 1);
문장을 출력하고 재귀함수를 실행하는데, 반복을 할 때마다 "____"문자열을 반복 수만큼 더하여 출력하도록 합니다.
 
 
  if (input == count) {
반복을 멈출 조건은 input 만큼 시행하게 되었을 때로 정했습니다.
    console.log(
`${line.repeat(count)}"재귀함수가 뭔가요?"
${line.repeat(count)}"재귀함수는 자기 자신을 호출하는 함수라네"`
    );
반복이 종료될 때 나타나는 문장을 출력합니다.
 
    for (i = count; i > 0; i--) {
      console.log(`${line.repeat(i)}라고 답변하였지.`);
      if (i == 1) return console.log("라고 답변하였지.");
    }
for 문을 이용해 "____라고 답변하였지." 라는 문장을 순서대로 출력하고
가장 마지막의 문장을 return하여 재귀함수를 종료하도록 합니다. 

 

  • for문을 이용하지 않아도 출력하는 방법이 있을 것 같긴 하지만 아무리 궁리해보아도 모르겠습니다.
  • return을 이렇게 이용해도 되는지 모르겠습니다.