리스트의 길이를 재귀(Recursion) 기법으로 구해야 하는 경우, 사용자가 직접 정의한 메서드와 간단한 인덱싱 기법을 활용하면 됩니다.
리스트는 정수, 실수, 문자열 등 서로 다른 자료형의 값(이기종 데이터)을 하나의 자료구조에 함께 저장할 수 있습니다.
재귀는 큰 문제를 잘게 나눈 작은 단위의 결과를 계산한 뒤, 이 결과들을 결합하여 전체 문제의 해답을 도출하는 방식입니다.
예제
아래는 이를 보여주는 데모입니다 −
def list_length(my_list):
if not my_list:
return 0
return 1 + list_length(my_list[1::2]) + list_length(my_list[2::2])
my_list = [1, 2, 3, 11, 34, 52, 78]
print("The list is :")
print(my_list)
print("The length of the string is : ")
print(list_length(my_list))
출력
The list is :
[1, 2, 3, 11, 34, 52, 78]
The length of the string is :
7
설명
- 'list_length'라는 이름의 메서드가 정의되며, 리스트를 매개변수로 받습니다.
- 리스트가 비어 있으면(base case), 메서드는 0을 반환하며 재귀 호출이 종료됩니다.
- 리스트가 비어 있지 않으면, 첫 번째 요소를 기준으로 홀수 인덱스 슬라이스(my_list[1::2])와 짝수 인덱스 슬라이스(my_list[2::2])로 나누어 각각 재귀 호출하고, 그 결과에 1을 더해 반환합니다.
- 함수 외부에서 리스트를 정의한 뒤 콘솔에 출력합니다.
- 이 리스트를 매개변수로 전달하여 'list_length' 메서드를 호출합니다.
- 최종 결과가 콘솔에 출력됩니다.
이처럼 재귀를 활용하면 반복문 없이도 리스트의 길이를 계산할 수 있으며, 문제를 점점 작은 하위 문제로 분할해 해결하는 재귀의 핵심 원리를 이해하는 좋은 예제가 됩니다.