33.4 연습문제: 재귀호출로 회문 판별하기

다음 소스 코드를 완성하여 문자열이 회문인지 판별하고 결과를 True, False로 출력되게 만드세요. 여기서는 재귀호출을 사용해야 합니다.

practice_recursive_function_palindrome.py

def is_palindrome(word):
                                    
    ...
                                    
 
print(is_palindrome('hello'))
print(is_palindrome('level'))

실행 결과

False
True

정답

    if len(word) < 2:
        return True
    if word[0] != word[-1]:
        return False
    return is_palindrome(word[1:-1])

해설

재귀호출에서 문자열이 회문인지 판단할 때는 종료 조건이 두 가지입니다. 먼저 if word[0] != word[-1]:와 같이 첫 번째 문자와 마지막 문자가 다를 때는 False를 반환합니다. 그다음에 다시 is_palindrome 함수를 호출하고 결과를 반환합니다. 이때 is_palindrome 함수에는 word[1:-1]처럼 현재 문자열의 두 번째 문자부터 뒤에서 두 번째 문자까지만 잘라서 다시 넣어줍니다. 이런 방식으로 첫 번째 문자와 마지막 문자를 제외하면서 회문을 판별합니다.

그리고 재귀호출을 계속 하다가 문자가 하나(문자 두 개 미만)가 되면 True를 반환하도록 만듭니다. 즉, 이전 재귀호출에서 if word[0] != word[-1]:에 걸려들지 않았다면 마지막에 if len(word) < 2:로 글자가 하나일 때 재귀호출을 끝내고 True를 반환해서 최종적으로 회문이 맞다고 판단합니다.

특히 if len(word) < 2:if word[0] != word[-1]:보다 먼저 와야 합니다. 그렇지 않으면 글자가 하나도 없는데도 word[0]word[-1]에 접근하여 에러가 발생하게 됩니다.