728x90
17478번: 재귀함수가 뭔가요? (acmicpc.net)
N = int(input())
print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.")
def jaegui(n):
if (n == N):
print('_' * 4 * n + "\"재귀함수가 뭔가요?\"")
print('_' * 4 * n + "\"재귀함수는 자기 자신을 호출하는 함수라네\"")
print('_' * 4 * n + "라고 답변하였지.")
return
else:
print('_' * 4 * n + "\"재귀함수가 뭔가요?\"")
print('_' * 4 * n + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.")
print('_' * 4 * n + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.")
print('_' * 4 * n + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"")
jaegui(n + 1)
print('_' * 4 * n + "라고 답변하였지.")
jaegui(0)
이 문제를 풀기까지...
나에게 <재귀>라는 개념이 너무 어려웠다.
그래서 여러 문제들을 방황하다가 이 문제를 찾게 되었다.
이리저리 옮겨다 보면 원하는 결과가 나올 수 있고, 그것이 문장으로 드러나 다른 재귀문제들보다 풀기 쉬웠던 것 같다.
재귀함수는 보통 함수 안에서 받은 N을 break문으로 설정하고, 시작할 때는 0같은 값부터 시작하는 것이 특징인 듯 하다.
그리고 꼭 jaegui(n + 1)처럼 재귀함수를 break문까지 도달할 수 있게 하는 문장이 필요한데,
그것이 어느곳에 위치하느냐에 따라 결과가 완전히 바뀌는것 같다.
만일 jaegui(n+1)이 else의 첫 줄로 간다면 n == N에 해당하는 결과가 처음에 출력된다.
또한, "라고 답변하였지"가 jaegui(N+1)아래에 위치하기 때문에 반복문의 나중에 해당하는 곳에 쫘르륵 연속 출력된다.
또한 여기서 ___ <-이것도 신경써줘야 하는데, 이를 위해서는 파이썬에서 print문이 어떤식으로 배치되는지 알 필요가 있겠다.
*와 +를 잘 조합해서 프린트 내에서 수식을 이용해 쉽게 출력할 수 있다.
728x90
'알고리즘 공부(C++)' 카테고리의 다른 글
1929 소수 구하기 (0) | 2022.08.16 |
---|---|
9012 괄호 (0) | 2022.08.16 |
1026 보물 (0) | 2022.08.13 |
1476 날짜 계산 (0) | 2022.08.12 |
1436 영화감독 숌 (0) | 2022.08.11 |