자기 자신을 호출하는 구조
def func_recursive():
pass
...
func_recursive()
위의 코드처럼 특정 함수 내부에서 다시 해당 함수를 호출하는 구조를 일컫는다.
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
factorial(3)
>>
3 * factorial(2)
2 * factorial(1)
1 * 1
= 6
def fibonacci():
if n == 1:
return 1
if n == 2:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
fibonacci(5)
>>
fibonacci(4) + fibonacci(3)
(fibonacci(3) + fibonacci(2)) + (fibonacci(2) + fibonacci(1))
((fibonacci(2) + fibonacci(1)) + 1) + ( 1 + 1 )
(1 + 1 + 1) + (1 + 1)
= 5
외에도 while( )
문과 비슷하게 특정 조건이 만족되지 않는 한 해당 함수를 반복 호출해야 하는 경우에 유용하게 사용할 수 있을 것으로 생각된다.
list 안의 list를 모두 없애는 작업도 가능하다.
def flatten(data):
result = []
# checker 변수가 data를 하나씩 훑는다
for checker in data:
# 만약 checker 변수의 자료형이 List로 확인되면
if type(checker) == list:
# checker를 다시 이 함수에 넣어서 보낸다
# 처음에 들어온 data의 요소를 확인하면서
# 해당 요소가 list라면 재귀하는 것이다
result += flatten(checker)
else:
# list가 아니라면 메서드로 list에 추가한다
result.append(checker)
return result
data = [1,[2,3,4],1,2,[3,2,1],2,3,[1,2],3,[5,1],2,[5,9,0],[4,2]]
print(flatten(data))
>> [1, 2, 3, 4, 1, 2, 3, 2, 1, 2, 3, 1, 2, 3, 5, 1, 2, 5, 9, 0, 4, 2]