woonadz :)

[백준/C언어] 재귀함수가 뭔가요?_17478번_nabi 본문

IT/백준

[백준/C언어] 재귀함수가 뭔가요?_17478번_nabi

C_scorch 2022. 2. 20. 00:36
반응형

첫번째 제출 때는 프로토타입 선언 부분에 수정하지 않은 부분이 있어 컴파일 에러가 났고

두번째 제출 때는 출력값 오타 때문에 컴파일 에러가 났다.

두번 모두 어이없는 이유로 틀렸다.

 

최종 제출 코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int recursion(int num, int num2);

int main() {
	int N;

	scanf("%d", &N);
	printf("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");

	recursion(N, N);

	return 0;
}
int recursion(int num,int num2) { //재귀에 사용할 num과 기존의 값을 유지하는 num2
	int i;

	if (num > 0) {
		for (i = 0; i < num2 - num; i++) {
			printf("____");
		}
		printf("\"재귀함수가 뭔가요?\"\n");
		for (i = 0; i < num2 - num; i++) {
			printf("____");
		}
		printf("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n");
		for (i = 0; i < num2 - num; i++) {
			printf("____");
		}
		printf("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n");
		for (i = 0; i < num2 - num; i++) {
			printf("____");
		}
		printf("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n");
		return recursion(num - 1, num2);
	}
	else if (num == 0) { //num이 0이 될 경우 기존 num2 숫자만큼 반복이 됨
		for (i = 0; i < num2; i++) {
			printf("____");
		}
		printf("\"재귀함수가 뭔가요?\"\n");
		for (i = 0; i < num2; i++) {
			printf("____");
		}
		printf("\"재귀함수는 자기 자신을 호출하는 함수라네\"\n");
		return recursion(num - 1, num2);
	}
	else if (num2 + num != -2) { //num2+num이 -2가 되지 않을 경우  
		for (i = 0; i <= num2 + num; i++) {
			printf("____");
		}
		printf("라고 답변하였지.\n");
		return recursion(num - 1, num2);
	}
	else //num2+num == -2가 될 경우 함수 종료
		return 0;
}

 

반복문 부분을 함수로 선언해서 사용해주어도 더 간결하고 보기 편할 것 같아서 아래처럼 바꾼 코드

 

더 간결한 코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void repeat(int number);
int recursion(int num, int num2);

int main() {
	int N;
	scanf("%d", &N);
	printf("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
	recursion(N, N);

	return 0;
}
void repeat(int number) {
	int i;
	for (i = 0; i < number; i++) {
		printf("____");
	}
}
int recursion(int num,int num2) { //재귀에 사용할 num과 기존의 값을 유지하는 num2
	int i;
	if (num > 0) {
		repeat(num2 - num);
		printf("\"재귀함수가 뭔가요?\"\n");
		repeat(num2 - num);
		printf("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n");
		repeat(num2 - num);
		printf("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n");
		repeat(num2 - num);
		printf("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n");
		return recursion(num - 1, num2);
	}
	else if (num == 0) { //num이 0이 될 경우 기존 num2 숫자만큼 반복이 됨
		repeat(num2);
		printf("\"재귀함수가 뭔가요?\"\n");
		repeat(num2);
		printf("\"재귀함수는 자기 자신을 호출하는 함수라네\"\n");
		return recursion(num - 1, num2);
	}
	else if (num2 + num != -2) { //num2+num이 -2가 되지 않을 경우  
		repeat(num2+num+1);
		printf("라고 답변하였지.\n");
		return recursion(num - 1, num2);
	}
	else //num2+num == -2가 될 경우 함수 종료
		return 0;
}
반응형