입력 : 재귀 횟수 N(1 ≤ N ≤ 50)
출력 : "재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."라고 답변하였지.
위와 같은 문구를 재귀 횟수만큼 반복한다.
마지막 줄에 라고 답변하였지는 반복 후에 마무리 닫는 형태로 출력하도록 하며 2번째 반복부터 ____ (_)를 4번 작성해서 차이점을 주도록 한다.
하나의 함수에서 자기 자신을 다시 호출해 작업을 수행하는 알고리즘
왜 도미노가 쓰러짐?
이유1) 1 -> 2 -> 3 -> 4
이유2) 1번 도미노가 쓰러진다.
k번 도미노가 쓰러지면 k+1번 도미노도 쓰러진다.
void func(int n){
if(n==0) return;
cout<< n << ' ';
func(n-1);
}
3출력 -> func(2) -> 2출력 -> func(1) -> 1출력 -> func(0)
func(1)이 1을 출력한다.
func(k)가 k,k-1,k-2 ... 1을 출력한다.
func(k+1)가 k+1,k,k-1,k-2 ... 1을 출력한다.
k+1 출력 -> func(k)호출 = k,k-1,k-2 ... 1 출력
팁
#include <iostream>
using namespace std;
// 입력값 재귀 횟수 N (1<=N<=50)
int N;
void line(const char* str, int count) {
for (int i = 0; i < count; ++i) {
cout << "____";
}
cout << str;
}
void recur(int cnt) {
line("\"재귀함수가 뭔가요?\"\n", cnt);
if (N == cnt) {
line("\"재귀함수는 자기 자신을 호출하는 함수라네\"\n", cnt);
}
else {
line("\"잘 들어보게.옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n", cnt);
line("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n", cnt);
line("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n", cnt);
recur(cnt + 1);
}
line("라고 답변하였지.\n", cnt);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
cout << "어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n";
recur(0);
}