• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

문자열 뒤집기 재귀함수 질문드려요

21.04.06 09:41 작성 조회수 294

0

제가 아무리 봐도 이해가 안되서요 ㅠㅠ

def reverse_string(string):

    if string == '':

        return None

    else:

        reverse_string(string[1:])

        print(string[0])

print(reverse_string('leehojun'))

여기서 leehojun 문자열이 함수 안으로 들어가고

else문으로 가서 reverse_string(string[1:])이 실행이 되잖아요 

string[1:]          string[0]

eehojun                   l

ehojun                     e

hojun                         e

ojun                            h

jun                               o

un                                  j

n                                    u

''                                     n

''                                      None

이렇게 정순으로 출력되는거 아닌가요?  이해가 안됩니다 ㅠ

답변 1

답변을 작성해보세요.

1

안녕하세요 제주코딩베이스캠프입니다.

재귀함수에서는 return문이 시작되는 부분부터 되돌아간다고 생각하면 쉽습니다.

예제에서는 return문이 빈 문자열일 경우에 None을 리턴하죠?
그럼 그 부분부터 이전 호출구문으로 돌아가게 됩니다.

그러니까, reverse_string([1:])의 가장 마지막 부분인 ''(빈문자열)이 매개변수로 들어가는 부분에서 None을 되돌려주며 그 다음문장인 print문이 실행됩니다.

글로만 적으면 이해하기 어려우실까봐 그림으로 작성해보았어요.

else문에서 print가 실행되기 전 함수를 다시 호출하는 부분을 빨간색 화살표로 표현하였고, 빨간 화살표가 모두 끝난 다음, if문에서 빈 문자열을 만났을 경우에 return이 시작되는 부분을 파란 화살표로 표현했어요.

맨 오른쪽에 큰 문자로 표시된 (n, u, j...) 부분이 print(string[0])이 실행된 부분입니다. 조금 이해가 되셨나요?

재귀함수는 처음부터 바로 이해하기는 어려우니 손으로 표를 만들어서 그려보는것도 매우 좋은 방법입니다!

여전히 잘 모르겠으면 언제든지 질문게시판을 이용해주세요 :)