[프로그래밍 기초]에 관심이 있으신가요?
무제한으로 수강해 보세요!
코드잇 시작하기
컴퓨터 과학 주제 둘러보기>재귀 함수>재귀 함수 개요
이해가 안되는부분
강원룡강원룡ROCK
2018년 10월 11일 작성
강원룡강원룡ROCK

def countdown(n):
    if n > 0:
        print(n)
        countdown(n-1)
        
countdown(4)

강의영상 보면 카운트다운 4에서 0까지 내려간 뒤에 카운트다운 0이 끝났기 때문에 카운트다운 1이 끝나고 카운트다운 1이 끝났기 때문에 카운트다운 2가 끝났다는 이 말이 어떤말인가요? 오 0 이 끝났기 때문에 1이 끝나고 1이끝나서 2가끝나고.... 3이 끝나고 4가 끝나거 왜그렇게 되는건가요?

왜 0이 끝났기 때문에 1이 끝나게 되나요?

끝났다는 말에 혼란이 오신 것 같은데

더 이상 재귀하지 않는다는 말로 이해하시면 좋을 것 같습니다.

그래도 이해가 안되신다면 그 함수가 할일을 다 했다고 생각하시면 좋을 것 같아요 :)

아시다시피 countdown함수는 재귀 함수입니다.<br> countdown에 값을 넣으면 조건에 맞춰 함수 내부에서 똑같은 함수가 요청이 되는데<br> 여기서 이 내부에서 요청된 함수가 더 이상 재귀하지 않을 때 까진 <span style="color: red; font-weight:400">계속 실행중인 상태</span>라고 생각해보세요.

countdown(4)를 실행하면, 내부에서 조건을 통과하고 print(4)를 한 다음 countdown(3)이 실행되는데,<br> 이 때, countdown(3)을 불렀다고해서 countdown(4)의 역할이 끝난게 아니라<br> <span style="color: red; font-weight:400">countdown(3)의 역할이 끝날 때까지 계속 실행중인 상태</span>라고 생각하셔야되요.

그렇게 계속 쭉쭉 이어나가다보면 countdown(1)에 도달했을 때<br> print(1)이 실행된 다음 countdown(0)이 불리겠죠?

그런데 countdown(0)에 도달했을 땐<br> if n > 0 부분에서 해당 조건이 false 이기 때문에 조건문 이하 부분이 더 이상 실행되지 않습니다.

이제 더 이상 재귀하지 않는거죠.

countdown(0)은 조건문 부분에서 자기 할일이 끝났기 때문에 더 이상 할 일이 없습니다.

그제서야 countdown(1)의 입장에서 봤을 때<br> countdown(1)의 내부에 있던 countdown(0)이 할 일이 끝났으니<br> countdown(1)의 할 일도 끝납니다

그리고나면 또 countdown(2)의 입장에서 봤을 때도<br> countdown(2)의 내부에 있던 countdown(1)이 할 일이 끝났으니<br> countdown(2)의 할 일도 끝납니다

그래서 해당 강의 영상 중간부터 countdown(4)의 예시를 들 때<br> countdown(4)를 보여주고 지우고 countdown(3)을 보여주는 식이 아니라<br> 함수가 실행되는 모양을 지우지 않고 끝까지 나열했다가 0에 도달하면서 거꾸로 하나씩 지운 이유인 것 같습니다.

재귀함수 공부에 조금은 도움이 되셨길 바래요 :)

def countdown(n):
    if n > 0:
        print("countdown(%d) is started." % n)
        countdown(n-1)
    print("countdown(%d) is terminated." % n)

countdown(4)

수업 설명에 도움이 되기 위해 이렇게 코드를 짜봤습니다. 출력 결과는 다음과 같습니다.

countdown(4) is started.
countdown(3) is started.
countdown(2) is started.
countdown(1) is started.
countdown(0) is terminated.
countdown(1) is terminated.
countdown(2) is terminated.
countdown(3) is terminated.
countdown(4) is terminated.

이해하는데 도움이 되길 바랍니다.

관련 질문
컴퓨터 과학 주제 둘러보기>재귀 함수>재귀 함수 개요
2017년 1월 22일 작성
YoungjunYoungj..Youngjun
답변 267 조회
컴퓨터 과학 주제 둘러보기>재귀 함수>재귀 함수 개요
2019년 3월 26일 작성
WonSeok OhWonSeo..WonSeok Oh
답변 327 조회
컴퓨터 과학 주제 둘러보기>재귀 함수>재귀 함수 개요
2019년 2월 19일 작성
Lim Sung HooLim Su..Lim Sung Hoo
답변 083 조회