재귀(recursion) 기법을 사용하여 중첩 리스트(nested list)의 총합을 구해야 할 때는, 리스트를 매개변수로 받는 사용자 정의 메서드를 활용하는 것이 일반적입니다.
재귀란 하나의 큰 문제를 작은 단위로 나누어 각 부분의 결과를 계산한 후, 이 결과들을 결합하여 전체 문제의 해답을 도출하는 프로그래밍 기법입니다.
참고로 파이썬의 리스트는 서로 다른 자료형의 값을 함께 저장할 수 있습니다. 즉, 정수, 실수, 문자열 등 어떤 데이터든 하나의 리스트 안에 담을 수 있습니다.
예제
다음은 재귀를 이용해 중첩 리스트의 합계를 구하는 과정을 보여주는 예제입니다.
def recursion_sum(my_list):
my_total = 0
for elem in my_list:
if (type(elem) == type([])):
my_total = my_total + recursion_sum(elem)
else:
my_total = my_total + elem
return my_total
my_list = [[2,3], [7,9], [11,45], [78,98]]
print("The list elements are :")
print(my_list)
print( "The sum is :")
print(recursion_sum(my_list))출력 결과
The list elements are : [[2, 3], [7, 9], [11, 45], [78, 98]] The sum is : 253
코드 설명
- 'recursion_sum'이라는 이름의 메서드를 정의하며, 리스트를 매개변수로 받습니다.
- 함수 내부에서 합계를 저장할 변수를 먼저 0으로 초기화합니다.
- 리스트의 각 요소를 반복하면서 확인하는데, 만약 요소의 타입이 리스트라면 해당 하위 리스트의 합을 더하기 위해 같은 메서드를 다시 호출합니다. 이것이 바로 재귀 호출입니다.
- 요소가 리스트가 아니라면, 해당 값을 그대로 변수에 더합니다.
- 모든 반복이 끝나면 최종 합계를 담은 변수를 반환하며, 이 값이 콘솔에 출력됩니다.
함수 외부에서 수행되는 작업
- 중첩 리스트를 정의한 뒤 콘솔에 출력하여 확인합니다.
- 이 리스트를 매개변수로 전달하며 'recursion_sum' 메서드를 호출합니다.
- 메서드가 반환한 최종 합계가 콘솔에 표시됩니다.