코딩공부

[python] 재귀함수 회문 검사 / TIL_220920

Dong_Devlog 2022. 9. 20. 19:51

회문(palindrome) : 거꾸로 읽어도 제대로 읽어도 같은 단어와 문장

우영우, 기러기, 토마토, 스위스...

 

재귀함수를 통해 회문 검사 구현해보기

회문이 맞다면 True, 아니라면 False

def ispalindrome(string):
    if len(string) <= 1:
        return True

    if string[0] != string[-1]:
        return False

    return ispalindrome(string[1:-1])


input = "abcba"
print(ispalindrome(input))	#True

 

string값의 길이가 1 이하라면 True로 설정해둔다.

그리고 아래 수행문을 통해 회문인지 확인하게 하고 재귀함수를 통해string 값이 1 이하가

될 때까지 False가 리턴 되지 않는다면 입력된 문장이 True라는 의미를 갖는다.

    if len(string) <= 1:
        return True

 

ispalindrome(string)에 입력 값을 넣어준다면 첫 번째 문자와 마지막 문자가 일치하는지 확인해야 한다.

string[0]과 string[-1]이 일치하지 않는다면 return 값이 False로 출력되게끔 구현하고

    if string[0] != string[-1]:
        return False

재귀함수를 사용하여 범위를 조정하여 ispalindrome 함수에 다시 돌려주면 된다.

string 범위를 [1:-1]로 조정해준다면 2번째 문자부터 뒤에서 2번째 문자까지가 된다.

ispalindrome함수에 조정 된 string을 넣어서 다시 함수를 수행한다.

   return ispalindrome(string[1:-1])
   
   
# a = "abcde"
# print(a[1:-1])
# 출력 값 : bcd

 

ispalinderome(string)에 "abcba"를 입력해준다면 len(abcba)는 5이기 때문에 첫 번째 조건문은 넘어가고

"abcba"의 첫번째 문자와 마지막 문자가 일치하기 때문에 두 번째 조건문도 넘어가므로

ispalidrome(string[1:-1])를 통해 "bcb"가 다시 함수 string 값으로 들어가게 된다.

다시 수행을 하면 c만 남고 한번 더 함수를 돌려주면 길이가 1이기 때문에 return 값으로 True를 출력하게 된다.

def ispalindrome(string):
    if len(string) <= 1:
        return True

    if string[0] != string[-1]:
        return False

    return ispalindrome(string[1:-1])


input = "abcba"
print(ispalindrome(input))	#True

 

재귀함수는 코드를 보고 이해하는 것은 쉽지만

구현해내는 것은 정말 어려운 것 같다...