sm 기술 블로그

72. 17478 (재귀함수가 뭔가요?) 본문

문제/백준_파이썬

72. 17478 (재귀함수가 뭔가요?)

sm_hope 2022. 6. 6. 12:49
N = int(input())


def chatBot(i, N):

    print("____"*i+"\"재귀함수가 뭔가요?\"")

    if i == N:  # i와 N이 같으면 함수 호출을 그만함
        print("____"*i+"\"재귀함수는 자기 자신을 호출하는 함수라네\"")
    else:
        print("____"*i+"\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.")
        print("____"*i+"마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.")
        print("____"*i+"그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"")
        chatBot(i+1, N)
        # i와 N이 같지 않으면 함수 호출을 계속 진행

    print("____"*i+"라고 답변하였지.")
    # else에서 chatBot 함수를 호출한 값이 먼저 출력됨


print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.")
chatBot(0, N)

재귀함수는 함수를 호출하는 시점 뒷부분은 모든 함수 호출이 끝나고 실행된다.

B번에 함수 호출을 정의했다면 입력된 횟수만큼 A번이 반복하여 출력되고 C번이 출력된다.

C번이 출력되는 순서는 가장 최근에 호출된 함수에서부터 시작된다.

그림을 그려보면

1A 출력 => 1B로 인해 2 호출 => 2A 출력 => 2B로 인해 3 호출 => 3A 출력 

=> 3C 출력 => 2C 출력 => 1C출력

'문제 > 백준_파이썬' 카테고리의 다른 글

74. 11729(하노이 탑 이동 순서)  (0) 2022.06.08
73. 2447 (별 찍기 - 10)  (0) 2022.06.06
71. 10870(피보나치수열)  (0) 2022.06.06
70. 10872 (팩토리얼)  (0) 2022.06.06
69. 9020(골드바흐의 추측)  (0) 2022.06.05
Comments