상세 컨텐츠

본문 제목

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

Programming language/PYTHON

by 주초위왕 2023. 3. 6. 21:47

본문

2. 회문(순서를 거꾸로 읽어도 제대로 읽은 것과 같은 단어와 문장을 의미)을 판별할 수 있는 함수를 리스트 슬라이싱을 활용하여 만들어보자.

회문이면 True, 아니면 False 반환
예) 우영우(True), 역삼역(True), 오렌지(False)
def palindrome(string):
    if len(string) <= 1:
        return True
    if string[0] == string[-1]:
        return palindrome(string[1:-1])
    else:
        return False
def palindrome(string):
    if len(string) < 2:
        return True
    if string[0] != string[-1]:
        return False
    return palindrome(string[1:-1])

1. return은 함수에 결과값을 반환시켜주는 역할을 가짐. return이 실행되면 함수를 빠져나온다.

2. True와 False 두가지 값을 반환해야 하므로 재귀호출을 중지시켜주는 조건문 두개가 필요하다.

3. 재귀함수의 목적은 문제를 점점 좁혀가는 것.


def palindrome(string):                       #함수 def palindrome에 매개변수 입력
    if len(string) <= 1:                           #(문자열 인덱싱) 괄호 안에 넘겨준 값의 길이를 int타입으로 1보다 같거나 작다면  재귀호출 금지
        return True                                   #재귀호출을 계속 하다가 문자가 하나(문자 두 개 미만)가 되면 True를 반환하도록
    if string[0] == string[-1]:                #조건문 확인 - 문자열의 첫번째 문자 == 마지막 문자 (추출하기)가 같다면(==) 아래로 와서
        return palindrome(string[1:-1])  #첫번째 문자와 마지막 한개의 문자를 제외한 문자 리턴해주기
    else:
        return False                                  #조건식이 거짓이면 False
 


다시 해석해보면, len(string) <= 1 인수로 주어지는 문자열의 길이가 1미만이거나 같을때라는 뜻으로 재귀호출을 중지하라는 조건 중 하나이다.(회문을 판별하는 과정에서 해당 조건문으로 호출되어 되돌아오는 경우는 회문이며 해당 회문의 길이가 1미만이거나 같다면, 비교 대상이 없을 때 True를 준다는 의미.)


인수로 주어진 문자열의 인덱스 번호를 이용하여 맨 처음 문자열의 인덱스 string[0] == string[-1]와 같이 첫 번째 문자와 마지막 문자를 비교했을 때 참이면,  return은 재귀함수로 다시 한 번 이 글자의 첫번쨰와 끝번 째를 돌려준다.

반응형

관련글 더보기

댓글 영역