Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 재귀 함수로 문자열에서 특정 문자의 등장 횟수 구하기

파이썬에서 재귀(recursion)를 사용해 문자열 안에 특정 문자가 몇 번 등장하는지 확인해야 하는 경우, 하나의 함수를 정의하고 그 안에서 if 조건문을 활용하면 손쉽게 해결할 수 있습니다.

재귀는 큰 문제를 잘게 나눈 작은 단위의 결과를 먼저 계산한 뒤, 이 결과들을 다시 결합하여 전체 문제의 해답을 만들어내는 방식입니다. 문자 개수 세기처럼 반복적인 패턴을 지닌 문제에 특히 적합합니다.

예제 코드

아래는 재귀 함수를 활용해 문자 출현 빈도를 구하는 전체 코드입니다.

def check_frequency(my_str, my_ch):
    if not my_str:
        return 0
    elif my_str[0] == my_ch:
        return 1 + check_frequency(my_str[1:], my_ch)
    else:
        return check_frequency(my_str[1:], my_ch)

my_string = input("Enter the string :")
my_char = input("Enter the character that needs to be checked :")
print("The frequency of " + str(my_char) + " is :")
print(check_frequency(my_string, my_char))

실행 결과

Enter the string : jaanea
Enter the character that needs to be checked : a
The frequency of a is :
3

코드 설명

  • check_frequency라는 이름의 함수가 정의되며, 대상 문자열(my_str)과 찾고자 하는 문자(my_ch)를 매개변수로 받습니다.
  • 함수는 먼저 문자열이 비어 있는지 검사합니다. 비어 있다면 더 이상 확인할 문자가 없다는 뜻이므로 0을 반환하며, 이것이 재귀 호출을 멈추는 종료 조건(베이스 케이스) 역할을 합니다.
  • 문자열의 첫 번째 문자(my_str[0])가 찾는 문자와 일치하면 1을 더한 값과 함께, 나머지 문자열(my_str[1:])에 대해 자기 자신을 다시 호출합니다.
  • 일치하지 않으면 1을 더하지 않고 단순히 나머지 문자열에 대해 재귀 호출만 수행합니다.
  • 프로그램은 사용자로부터 문자열과 확인할 문자를 입력받습니다.
  • 입력받은 두 값을 인수로 전달해 함수를 호출하고, 그 반환값을 콘솔에 출력합니다.

동작 원리 살펴보기

예를 들어 "jaanea"에서 'a'의 개수를 구한다고 가정해 보겠습니다. 함수는 호출될 때마다 문자열을 한 글자씩 줄여 가며 첫 글자만을 검사하고, 'a'를 발견할 때마다 1씩 누적합니다. 문자열이 모두 소진되면 지금까지 누적된 값인 3이 최종 결과로 반환됩니다.

마치며

참고로 실무에서는 문자열 객체의 기본 메서드인 count()를 사용하면 한 줄로 동일한 결과를 얻을 수 있습니다. 하지만 재귀 방식은 문제를 작은 단위로 분할해 해결하는 사고방식을 익히는 데 매우 유용한 학습 예제이므로, 재귀의 기본기를 다지고 싶다면 직접 구현해 보는 것을 추천합니다.