알고리즘 스터디 (재귀함수가 뭔가요?[백준 17478])

박윤택·2022년 5월 19일
3

알고리즘

목록 보기
9/25

문제




문제 이해

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

재귀 함수 호출 시점은 라고 답변하였지 앞 부분에서 재귀 함수를 호출해야한다.


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class WhatIsRecursive {
  static int N;

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    N = Integer.parseInt(st.nextToken());
    recursive(N);
  }

  public static void recursive(int num) {
    if (num == N) // 제일 처음
      System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
    if (num == 0) { // 종료 시점
      System.out.println("_".repeat((N - num) * 4) + "\"재귀함수가 뭔가요?\"");
      System.out.println("_".repeat((N - num) * 4) + "\"재귀함수는 자기 자신을 호출하는 함수라네\"");
      System.out.println("_".repeat((N - num) * 4) + "라고 답변하였지.");
      return;
    } else { // 종료 시점 아니면
      System.out.println("_".repeat((N - num) * 4) + "\"재귀함수가 뭔가요?\"");
      System.out.println("_".repeat((N - num) * 4) + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
      System.out.println("_".repeat((N - num) * 4) + "마을 사람들은 모두 2그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
      System.out.println("_".repeat((N - num) * 4) + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
    }
    recursive(num - 1); // 재귀 호출
    System.out.println("_".repeat((N - num) * 4) + "라고 답변하였지.");
  }
}

설명

  1. N을 입력 받는다.
  2. 재귀함수 파라미터로 N을 넣고 재귀함수 호출한다.
  3. 첫 줄 출력한다.
    4-1. (N-num)4번 만큼 _문자를 반복하고 주어진 문장들을 출력한다.
    4-2. 재귀함수 호출한다.(num-1)
          5-1. (N-num)
    4번 만큼 문자를 반복하고 주어진 문장들을 출력한다.
          5-2. 재귀함수 호출한다.(num-1)
           .....
             N-1. 종료 시점 문장 출력 후 재귀함수 종료
          5-3. (N-num)*4번 만큼
    문자를 반복 후 마지막 문장 출력
    4-3. (N-num)*4번 만큼 _문자를 반복 후 마지막 문장 출력

"_" 문자가 "-"문자인 줄 알고 여러번 시도하였다... 자세히 보자!


0개의 댓글