inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

제주코딩베이스캠프 Code Festival: Python 100제

재귀함수3_재귀함수 사례

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

513

김규혁

작성한 질문수 20

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

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

코테 준비 같이 해요! python

답변 1

1

제주코딩베이스캠프

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

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

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

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

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

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

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

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

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

41번 문제 질문입니다.

0

321

0

94번 질문

0

201

0

알고리즘 강의가 어떤 것인가요?

0

269

1

3:55분부터 이해가 안갑니다

0

273

0

64번문제 작동이 안됩니다

0

274

0

1부터 100까지의 합

0

265

1

왜 '혜원'이 max값으로 출력되는지 모르겠습니다

1

381

1

sorted 와 sort 질문입니다

0

212

1

강의에서 사용하는 문제 제출 플렛폼 사용은?

0

242

0

37번 코드 / 오류 문의

0

317

1

40번질문입니다.

2

366

2

부록 Counter부터 내용이 안보여요

0

413

1

선택정렬 최솟값_인덱스 부분 질문입니다.

0

208

1

코딩문제 채점

0

296

1

자바스크립트 100제란 같은문제일까요?

0

244

1

50번 이후 문제는 안올라온건가요?

0

294

1

99번에 오류가 살짝 있어서 고쳐봤어요

0

298

0

마지막에 numpy 모듈 슬라이싱 사용시

0

264

0

강의에서 문제는 노션에서 복사해서 주피터나 파이썬 IDE복사해서 풀어보는 건가요?

0

334

1

공부 방법에 대해 질문드립니다.

1

281

1

38번 질문입니다.

0

136

0

37번문제 질문이 있습니다

0

126

0

40번 관련 질문드립니다.

0

163

0

학습방식에 대해 질문드립니다.

0

182

1