


종료 조건과 자기자신을 호출한다는 걸 항상 염두해야 합니다._를 통해 text가 몇번째 재귀함수인지를 잘 보여주고 있습니다.depth를 인자로 주고, 재귀함수를 호출할 때마다 ++depth를 통해 몇 번 호출되었는지를 계산합니다.import java.util.Scanner;
public class Main{
//코드가 실행되는 main부분입니다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 입력을 스캐너로 받습니다.
int depth = 0;
int N = sc.nextInt();
System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
recursive(depth,N);
}
// _의 개수를 구하는 메서드입니다.
static String underbar(int depth) {
String underbar = "";
for (int i = 0; i < depth*4; i++) {
underbar +="_";
}
return underbar;
}
static void recursive(int depth,int N) {
if (depth == N) { //종료조건입니다.
String underbar = underbar(depth);
System.out.println(underbar+"\"재귀함수가 뭔가요?\"");
System.out.println(underbar+"\"재귀함수는 자기 자신을 호출하는 함수라네\"");
System.out.println(underbar+"라고 답변하였지.");
return;
} else {
String underbar = underbar(depth);
System.out.println(underbar+"\"재귀함수가 뭔가요?\"");
System.out.println(underbar+"\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
System.out.println(underbar+"마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
System.out.println(underbar+"그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
recursive(++depth,N); // 여기서 재귀를 호출함으로써 재귀함수는 가장 안쪽부터 끝난다는 게 잘 보여집니다.
System.out.println(underbar+"라고 답변하였지.");
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int depth = 0;
int N = Integer.parseInt(bf.readLine());
StringBuilder sb = new StringBuilder();
sb.append("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다."+"\n");
sb.append(recursive(depth,N)); // StringBuilder에 recursive값을 append합니다.
System.out.println(sb);
}
//여기도 반복문이 아니라 StringBuilder를 활용하면 메모리 효율을 높일 수 있습니다.
//(sb.append("____"))
static String underbar(int depth) {
String underbar = "";
for (int i = 0; i < depth*4; i++) {
underbar +="_";
}
return underbar;
}
static String recursive(int depth,int N) { //recursive는 String을 return 합니다
if (depth == N) {
String underbar = underbar(depth);
String answer = (underbar+"\"재귀함수가 뭔가요?\""+"\n"+underbar+"\"재귀함수는 자기 자신을 호출하는 함수라네\""+"\n"+underbar+"라고 답변하였지.");
return answer;
} else {
String underbar = underbar(depth);
String answer = underbar+"\"재귀함수가 뭔가요?\""+"\n"
+underbar+"\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어."+"\n"
+underbar+"마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지."+"\n"
+underbar+"그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\""+"\n"
+recursive(++depth,N)+"\n"
+underbar+"라고 답변하였지.";
return answer; // answer에는 recursive를 반복한 전체 결과가 담깁니다.
}
}
}