알고리즘 공부(C++)

17478 재귀함수가 뭔가요?

혀니리리 2022. 8. 14. 13:26
728x90

17478번: 재귀함수가 뭔가요? (acmicpc.net)

 

17478번: 재귀함수가 뭔가요?

평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대

www.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