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